I ♥ WordPress

[時間割:Perl]『ミニマルPerl』その17
2009/02/02 23:23 posted by kunkichi

2月になりました。今月もがんばりすぎないようにがんばります。それが長く続けるコツ。

それはそうと、今日仕事帰りに本屋に寄ったら、こんなんが出てました。

さすが!と言わせる Plagger徹底攻略術
蒲生 睦男
シーアンドアール研究所
売り上げランキング: 42881

流行ってたのって一昨年ぐらいじゃなかったっけ?(笑)でもまあ書籍としてまとめられたものはないので、とりあえず買っときました。『ミニマルPerl』早く終わらせて次はこれだな。

ということで続き。今回まではワンライナー的なものや、grep や awk とかを Perl で実装してみる、って感じでしたが、少しプログラミング寄りになっていきます。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 96883

組み込み関数

  • 評価コンテキスト
    式の使われ方によって、スカラーコンテキストで評価するのか、リストコンテキストで評価するのか。
    例1: 配列をリスト変数、すなわち、配列のコピーとなる。(リストコンテキスト)@list = @F;例2: 配列の要素数をスカラーで代入(スカラーコンテキスト)$num = @F;例3: 配列の各要素をスカラーに代入。(リストコンテキスト)($num1, $num2) = @F;例4: 配列の各要素を順に表示する。(リストコンテキスト)print @list;例5: scalarを使って意図的にスカラーで出力する。(スカラーコンテキスト)print scalar @list;例6: スカラーとして使用される演算子を式で使う。(スカラーコンテキスト)if( @ARGV > 3 ){ ・・・ };例7: 配列の要素を指す場合の添字として使う。$F[@list] = "added";つまり、これだと配列の最後に新しい要素を追加したのと同じになる。
  • リストからスカラーの変換
    • 上で上げたscalarを使うmy @list = ("John","George","Paul","Ringo");
      print scalar @list;
      結果:4この場合は要素数になる。
    • ダブルクォートする。my @list = ("John","George","Paul","Ringo");
      print "@list";
      結果:John George Paul Ringoこちらの場合は各要素をスペースでつなげた一つの文字列となる。
    • joinを使う。これは後ほど。
  • スカラーからリストへの変換
    • splitを使う。my $str = "John Paul George Ringo";
      my @member = split /\s+/, $line;
      一つ以上のスペースで文字列を区切って、各要素に代入。
      引数の順序に注意。最初の引数は区切りとする正規表現の指定。なければ「語」単位。2番目の引数で分割対象となる文字列を指定する。なければ$_。
    • これまでにやってきた、-wnlaとか-wplaとか。
  • localtimeを使って結果をスカラーとリストで取ってみる。
    • スカラーに代入すると、dateコマンドと同じようなフォーマットになる。my $str = localtime();
      print $str;
      結果:Mon Feb  2 23:07:37 2009scalarを使うともっと単純に書ける。print scalar localtime;
    • 単純にprintするだけだと、リストコンテキストで区切り文字がなく出力されるのでわかりにくいです。。。print localtime;結果:231123211091320この場合はリストに出力してやる。my ($sec,$min,$hour,$dayofmonth,$month,$year,$dayofweek,$dayofyear,$dst) = localtime;
      print $year + 1900 . "/$dayofmonth/$dayofmonth $hour:$min\n";
      結果:2009/2/2 23:16もしくは配列の添字でアクセスする。my $hour = (localtime)[2];
      print "This is $hour o'clock.\n";
      結果:This is 23 o'clock.
    • 上のをいちいち入力するのも覚えるのも面倒なので、perldocで調べるとコピペできる。# perldoc -f localtime・・・
      #  0    1    2     3     4    5     6     7     8
                         ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                                                     localtime(time);
      ・・・

ま、この辺は日常のスクリプトでも結構使うので普通だね。とりあえず今日はここまで。

コメント&トラックバック

トラックバックURL





このページの先頭へ