Mixtype

配列の、上から何番目かから抜き出すperl例文

Mixtype No.67 Last Update On 2011-02-21 2010 perl

配列の、上から何番目かから抜き出すperl例文

Mixtype No.67 Last Update On 2011-02-21 2010 perl
所謂PHPのarray_slice関数と同じことをperlでするには、

$x = 1;
foreach (@logs)
{
($a,$b,$c) = split(/,/);
$x++;
if( $x < 6 ) {print "\n";}
elsif( $x > 6 ) {print "あいうえお\n";}
elsif( $x > 16 ){last;}
}

のように、foreachとif文で抜き出したい行数までの処理をそれぞれ施すと簡単です。

ちょっと詳しく説明すると、
まず、$x=1で$xを1にしています。
foreachで@logsの中に、区切り文字が「,」で分けている配列を$a,$b,$cに分けています。(=split)
分けたら$xに1を足しています。(=$x++)
もし、$xが6よりも小さかったら何も表示せず、
また、$xが6よりも大きくなったら「あいうえお」と表示し
$xが16よりも大きくなったらforeachから脱出して処理を終わりなさい(=last)となっています。
分かりにくいのが$xに1を足しているところ=$x++だと思います。
例えば、まず初めて処理が行われる場合
「foreachの外」に$x=1があるので
foraechによる繰り返し処理が始まるよりも先に$xが1となります。
そして、$x=1となってからforeachの繰り返し処理に入ると、$x++が出てきます。
これは上で説明したように、$xに1を足す文ですので、初めての処理では$xは2となります。
すると、「if文の6よりも小さい」と言う文に当てはまるので「何も表示しない」となります。
次にforeachによる繰り返し処理の2回目が始まりますが、ここで$xは1には戻らずに$xは2のまま始まります。何故ならば、$x=1は「foreachの外」にあるため、繰り返し処理には含まれないのです。

またfor文を使うともっとシンプルに

for (3..6)
{
($a,$b,$c) = split(/,/);
print "$a$b$c";
}

と言うようになります。for文の使い方はここ(とほほのperl入門)を参考に。