サブルーチンとか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エンジニアになる①

2月までphp,javaを中心に扱っていました

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つけたい…

感想

PHPとJSかけたものの平方根 意外とわかりやすいがクセが強い