Modified: 5 March 2006
2次元配列(配列へのリファレンスへのリファレンス)を処理
myの変数をまとめて宣言
たっくさんのHTMLデータを出力
ファイルをアップロードする方法
Perlは多次元配列が苦手?、と勝手に思いました。
いろいろなコードから類推していろいろ書いてもことごとくエラーになります。
my $array = [ [1, 2], [3, 4] ];
foreach my $arr1 (@$array) {
foreach my $arr2 (@$arr1) {
print $arr2;
print "\n";
}
print "-\n";
}実行すると、以下のようになります。
1
2
-
3
4
-ちょっと変形します。
my (my $array = [ [1, 2], [3, 4] ]; foreach my $arr1 (@$array) { my ($a, $b) = @$arr1; print $a."-".$b."\n"; }実行すると、以下のようになります。
1-2
3-4
myの変数をまとめて宣言
"use strict" を付けずに作ったソースに、"use strict" を付けると、山のようにエラーが出ます。
そのほとんどは、変数を事前に宣言していないためのエラーです。そこで、せっせと以下のようなコードを加えます。
"my $string1; my $string2; my $string3;" かっこ悪いので、
"my $string1, $string2, $string3;" としてみるがエラーになる。
こう書けばいいそうです。
my ( $string1, $string2, $string3 );
文字の出力は、"print"文で行いますが、たくさんの文字を出力する場合、全部の行に、"print"文を記述するのは面倒ですし、可読性もよくありません。
以下のように、"print <<"EOM"から、EOM の間に文字列を列挙できます。
print <<"EOM"
<html>
<body>
メッセージ: $msg
</body>
</html>
EOMダブルコーテーションで囲まれた文字列同様に、"$msg" のように変数展開してくれます。
このような書き方は、「hereドキュメント」と呼び、Linuxなどのシステムとの連携機能で、Perlの仕様ではありません。
また、上記の"EOM"の文字は、対応しておればどんな文字列でもかまいません。終わりを空白行とする場合は、"print <<;"とだけ書きます。