Perl小ネタ:配列をソートする
■配列を数値で昇順ソート
@array = sort { $a <=> $b } @array;
■配列を辞書順で昇順ソート
@array = sort { $a cmp $b } @array;
降順にする場合は$aと$bを入れ替えます。
文字列データを数値でソートしようとするとエラーになります。
Perl小ネタ:配列の特定にある場所のデータを消す
先頭や末端は元々用意されているshift unshift pop pushをつかいます。
それではできない場合はspliceを使います。
my @array = qw(a b c);
splice(@array,1,1);
print Dumper @array;
で見ると、こうなっています。
$VAR1 = 'a';
$VAR2 = 'c';
書式は
splice ARRAY, OFFSET, LENGTH, LIST
となっていて、範囲を指定して取得したり、特定の範囲以外を削除もできます。
ちなみにdelete関数は中味は消しますが配列自体は残っています。
delete($array[1]);
print Dumper @array;
↓
$VAR1 = 'a';
$VAR2 = undef;
$VAR3 = 'c';
Perl小ネタ:エラーシグナルを取得する
独立したシステムで、エラーも別処理として参照したりするときにたまに使います。
BEGIN {
$SIG{__WARN__} = sub {
print $_[0];
};
}
warn "make warn";
ワーニングのシグナルを受けると、これが実行されるというところまでは何となくわかる。
そしてエラー内容が@_に格納されるらしいが、$_[1]以降にデータが入る事はあるのだろうか。。
$_[0]がなかった場合、warningが発生してさらに呼び出されて無限ループしないか・・・!?って思ったんですが、この中で発生したwarningは除外ぽいです。
Perl小ネタ:配列の中身をすべて削除
■配列の中身をすべて消すには以下のように()で引き渡します。
@array = ();
Perl小ネタ:正規表現でマッチした分割単位をそのまま配列に格納する方法
正規表現でマッチしたものを変数にいれる
まず、マッチしたものを変数に代入できるというのがあります。
my $string = '1234567890abcdefg';
my @array = $string =~ /[0-9]+/g;
foreach ( @array ) {
print "$_\n";
}
出力
1234567890
シンプルなWEB APIインターフェースをPerlで作る
極力シンプルな形で、HTTPを使ったAPIでデータをやりとりをする方法を考えます。
Perl小ネタ:配列の要素数を取得する
$#配列名
で要素数を取得できます。
my @array = (9,8,7);
print $#array;
[出力]:2
1個目は0からになります。
何もない場合は-1になります。
●配列の最後にデータを格納する
$array[$#array+1] = 値;
と
push(@array,値)
は同一の処理になります。
●配列の値でなにかしらのループをする
foreach my $value ( @array ) {
print $value;
}
と
for ( my $i = 0 ; $i <= $#array ; $i++ ) {
print $array[$i];
}
は同じ回数処理が走ります。
●配列のリファレンスに対して取得する場合
my $array_ref;
$array_ref->[0] = 'a';
$array_ref->[1] = 'b';
$array_ref->[2] = 'c';
print $#{$array_ref};
リファレンスにたいしても、同様の手法で取得できます。
僕が未だにPerlを使い続ける理由
について。
ブログ始めました。
どこの旧世代のシステムだよというぐらいの見た目ですが、ブログ始めました。
このWEBページは自作Perlプログラムでご提供しております。