Perlでは正確には二次元配列は利用できない。
サブルーチンの引数は@_の単なる配列にまとめられちゃうので、
複数の配列や多次元配列を渡す時は参照渡しにする。
以下は、
123456abc
と出力したいわけだが、
hoge1ではうまくいかない。
#---------------------------------------------------------------
@array1 = (
[1,2,3],
[4,5,6],
);
@array2 = ('a','b','c');
#---------------------------------------------------------------
&hoge1(@array1,@array2);
sub hoge1 {
my @hoge1 = shift;
my @hoge2 = shift;
foreach $var1 (@hoge1) {
foreach $var1_2 (@{$var1}) {
print $var1_2;
}
}
foreach $var2 (@hoge2) {
print $var2;
}
}
#---------------------------------------------------------------
&hoge2(\@array1,\@array2);
sub hoge2 {
my $hoge1 = shift;
my $hoge2 = shift;
#デリファレンス
my @hoge1 = @{$hoge1};
my @hoge2 = @{$hoge2};
foreach $var1 (@hoge1) {
foreach $var1_2 (@{$var1}) {
print $var1_2;
}
}
foreach $var2 (@hoge2) {
print $var2;
}
}
#久々にPerlさわったらすっかり忘れていたので・・・
----------------------- 配列 -------------------------------
■配列を静的に記述
@array = (
[4,5,6],
[1,2,3],
);
■4を出力
print $array[0][0];
■一次元目の要素数
print scalar(@array);
■二次元目の要素数
#$array[0]は配列のリファレンスなのでそれを解釈しなくてはならない
print scalar(@{$array[0]});
■ループ処理
foreach $var1 (@array) {
foreach $var2 (@{$var1}) {
print $var2;
}
}
for($i = 0; $i < scalar(@array); $i++) {
for($j = 0; $j < scalar(@{$array[$i]}); $j++) {
print $array[$i][$j];
}
}
■二次元目の3番目要素でソート
@array = sort { $a->[2] <=> $b->[2] } @array;
----------------------- 連想配列 ---------------------------
■連想配列を静的に記述
%array = (
'a0' => {
'a00' => 'hoge0',
'a01' => 'hoge1',
'a02' => 'hoge2',
},
'a1' => {
'a10' => 'hoge3',
'a11' => 'hoge4',
'a12' => 'hoge5',
},
);
■hoge0を出力
print $array{'a0'}{'a00'};
■ループ処理
foreach $key1 (keys(%array)) {
foreach $key2 (keys(%{$array{$key1}})) {
print $key2;
print $array{$key1}{$key2};
}
}
※keysやvaluesの戻り値はランダムになる
find /path/to/dir -name “*.pl” | xargs nkf -e -Lu –overwrite
findで/path/to/dir以下の*.plを検索してパイプとxargsでnkfに渡す
xargs=標準入力からコマンドラインを作成し、それを実行する
nkfのオプション
-e はEUCへ変換
(-s SJIS)
(-j JIS)
(-w UTF-8)
-Lu UNIX改行コード(LF)へ変換
(-Lw Windows改行コード(CR+LF)へ変換)
(-Lm Macintosh改行コード(CR)へ変換)
–overwrite は対象ファイルを上書き
■拡張子(ファイル支持子)がcgiのファイルのみ変更
findで/path/to/dir以下の*.cgiを検索してパイプとxargsでchmodに渡す
[code]find /path/to/dir -name “*.cgi” | xargs chmod 755[/code]
■ディレクトリのみ変更
findでtype指定してからパイプとxargsでchmodに渡す
[code]find /path/to/dir -type d | xargs chmod 755[/code]
——————–
※ xargs=標準入力からコマンドラインを作成し、それを実行する
——————–
Just another WordPress site