サブルーチンとかforとか
PHP/Javaエンジニアがperlエンジニアになる③
引数
sub createUser { my ($id, $name) = @_; } createUser(1, 'hoge'); `` うっかり`createUser()`と書いてしまいそう 引数にはハッシュや配列を渡せないらしい そこでリファレンスを渡す
sub hoge() { my ($ref) = @_; print “@$ref_array1[0]”; }
hoge(\@array);
##return
sub hogehoge { return 1; } ``
複数返せる
sub hogehoge { return (1,2,3); } `` ##for
for (@arr) { print “$_”; }
for my $a (@arr) { print “$a”; }
for ($a, $b, $c) { print “$_”; }
柔軟に書けるが、反面馴染みにくい ハッシュのfor
for (keys %hash){ print “$hash{$_}”; }
##map
my @arr2 = map {$_ + 1} @arr;
配列が返るのでハッシュにすることも出来る
my @hash = map {$_ => 1} @arr;
リファレンスの扱い方
PHP/Javaエンジニアがperlエンジニアになる②
リファレンス
取得
my $i = 1; my $ref = \$i; #参照
\
とつけると参照の取得になる
配列も同様に
my $arr_ref = \@array
参照の先の値を取りたいときは
スカラーなら$
をつける
print $$i;
配列なら@
をつける
for(@$ref){ print "$_", "\n"; }
配列の中身(がスカラーなら)$
$$ref[0]
要はリファレンスに限らず$
はスカラーを取るとき、@
は配列を取るとき、%
はハッシュを取るときに先頭につける
リファレンス的には$,@,%つけると覚えるより、$をつけると覚えたほうがわかりやすいかも
$ref->[0]
この方がスッキリわかりやすい
多次元配列
こうはかけない
$arr = ( (1,2),(3,4),(5,6) );
展開されて(1,2,3,4,5,6)
とおなじになる
$arr = ( [1,2],[3,4],[5,6] );
リファレンスで作る必要がある なんともまあ面倒な仕様
これはハッシュも同じ
PHP/Javaエンジニアがperlエンジニアになる①
4月からperlを中心に扱います しかし、未経験 ざっと見ても構文がわかりづらい!!
ってことで他の言語と比較しつつ書き残しておきます
–
変数定義のmy
javascriptで言うところのlet
だろうか
スコープをglobalではなく現在のブロックにする
リファレンス
=参照? PHPの参照を渡すのと同じか
$$hoge
で中身を参照するのが特徴的、厄介
無名配列
配列そのものではなく参照が直接はいる
通常
@a = (1,2,3);
参照が代入されるようだ
$a = [1,2,3];
ハッシュの場合は{...}
で無名ハッシュになる
構文的に[...]
のほうがjsやPHPで慣れているから要注意…
サブルーチン、関数
sub funchogehoge() { print "hello" } funchogehoge();
subで始まる
function
つけたい…
–