第16章. いくつかの高度なPerlテクニック
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
ここまで見てきたのはPerlの核心部分であり、Perlユーザとして理解しておくべき部分である。しかし、必須ではないが、ツールボックスに入れておくと便利なテクニックは他にもたくさんある。この章では、その中でも特に重要なものを集めた。また、この章は本書の続きであるPerl中級編にもつながっており、Perlの次のステップとなる。
しかし、章のタイトルに惑わされてはいけない。ここに書かれているテクニックは、すでに見たテクニックよりも理解するのが特に難しいものではない。単に初心者には必要ないという意味で「上級者向け」なのだ。この本を初めて読むときは、この章を飛ばして(あるいは読み飛ばして)Perlをすぐに使えるようにするといいだろう。1、2ヵ月後、Perlをもっと使いこなしたいと思ったときに、この章に戻ってくればいい。 この章全体は、大きな脚注だと思ってほしい。
スライス
与えられたリストの中からいくつかの要素だけを扱う必要があることはよくある。例えば、ベッドロック図書館は利用者の情報を大きなファイルに保存している。ファイルの各行は、コロンで区切られた6つのフィールド(名前、図書館カード番号、自宅住所、自宅電話番号、勤務先電話番号、現在貸し出し中のアイテムの数)で1人の利用者を記述している。ファイルの少しは次のようになる:
fred flintstone:2168:301 Cobblestone Way:555-1212:555-2121:3 barney rubble:709918:299 Cobblestone Way:555-3333:555-3438:0
図書館のあるアプリケーションでは、カード番号と貸し出し点数のみが必要で、他のデータは使わない。このようなものを使えば、必要なフィールドだけを取得することができる:
while (<$fh>) {
chomp;
my @items = split /:/;
my($card_num, $count) = ($items[1], $items[5]);
... # now work with those two variables
}しかし、@items という配列は他に必要ない。もったいない。split の結果をスカラー・リストに代入する方がいいのかもしれない:
my($name, $card_num, $addr, $home, $work, $count) = split /:/;
これで不要な配列@itemsは回避できるが、実際には必要のないスカラー変数が4つもできてしまう。このような状況のために、$dummy_1 のようなダミーの変数名をいくつも作り、split のその要素には本当に関心がないことを示す人もいる。しかし、Larryはそれでは面倒だと考え、undef の特殊な使い方を追加した。undef を代入先のリストの項目として使用すると、Perlは単純にソース・リストの対応する要素を無視する:
my(undef, $card_num, undef, undef, undef, $count) = split /:/;
この方がいいのだろうか?まあ、不要な変数を使わないという利点はある。しかし欠点もある。どの要素が$count なのかを知るために、undefsをカウントしなければならないのだ。そして、リストの要素が多くなると、かなり扱いにくくなる。例えば、 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access