sironekotoroの日記

Perl で楽をしたい

Perl入学式in東京 #4

Perl入学式in東京 #4 on Zusaar

Prrl入学式 YAPC::2013に引き続き参加。会場は五反田のDNP大日本印刷)さんのビルの大きな会議室。広くてよいところだったなぁ。 五反田駅前でうどん食べてから参加。

今回はサブルーチンと正規表現がテーマ。

実は正規表現はちょっとだけ知っていたので、今回の範囲は何とかなった。

何とかならなかったのがリファレンス。だもんで、正規表現を知っていても、検索・置換対象のデータを持ってくることができずに座礁していたという次第。

前回の復習が足りなかった。

リファレンスについては校長のpapix氏曰く

「ひたすら書いて身につけるしかない」
「そのうちぴーんとひらめいて分かるようになる」 「Webのデータ扱うにはリファレンス使えないとつらい」

ってことで、そういうものなのだろう。楽しみながら数こなすしかない。

次回のPerl入学式は12月を予定とのこと。テーマにテストが入ってくるらしい。次回も参加します。

本日の小ネタ

perlのサブルーチン名はsnake_caseって話があったんだけど

  • Camel_Case
  • snake_case

なるほど、と理解。Camel_Caseってのはラクダのこぶのようになっているってことか・・・

キャメルケース - Wikipedia

サブルーチン

sub say {
    my $str = shift @_;
    print "$str\n";
}
    say("hello, world!"); # => hello, world![改行]
  • sub サブルーチン名{ } でサブルーチンを定義
    • 末尾に;不要
  • サブルーチンに渡された引数は@_に格納されているので、それをshiftで取り出して処理する。
  • @_は当然配列なので、引数として配列やハッシュを渡す場合にはデリファレンスして渡す必要がある
    • 配列の中に配列を入れると展開されちゃう。ハッシュも同様。

サブルーチン

  • サブルーチンの引数@_は省略できる
  • returnでサブルーチンの返り値を設定できる
use strict;
use warnings;

sub add {
    my $left  = shift @_;
    my $right = shift @_;
    return $left + $right;
}

print add( 9, 8 );

本日のミス

perlと入力すると、Perl Monger!とかえってくる・・・はずのプログラム。しかし、偽と判断されnoって表示されてしまう。

sub perl_checker{
    my $left = @_;  #罠あり
    if ($left =~ /perl/){
        print "Perl Monger!\n"
    }else{
        print "no\n"
    }
}

my $input = <STDIN>;
chomp $input;

perl_checker($input);

これは2行目が問題

   my $left = @_;  #罠あり

つまり、@_という配列を、$inputというスカラー値に入れたため、文字列のperlではなく配列の要素数「1」で評価されていた。 「これがコンテキストで評価するってやつか!」と思い知る。

なお、正解は

   my $left = shift @_;  #罠あり