sironekotoroの日記

Perl で楽をしたい

Perl入学式 #5

無念

  • 12月8日も、補講の1月11日も参加できない
  • けど、スライドが公表されてるから自習は可能

mapとgrep

  • 構文が同じだと初めて知った。というか意識してなかった。
    • map {条件式} 配列
    • grep {条件式} 配列

練習問題

  • 引数として与えられた文字列が, 数値A 演算子 数値Bという文字列であれば, その値を計算して, 結果を返すような関数calc_stringを書いてみましょう
    - 「数値A」は任意の桁の正・負の整数とします. また, 演算子は+-*/%が使えるものとします.
    - 但し, 引数が与えられなかった場合(空の文字列の場合)は, undefを返します
    - また, 数値A 演算子 数値Bというフォーマットと一致しない場合もundefを返します
    関数calc_stringとwhile文を使って, Ctrlキーとdキーを押すまでの間標準入力から文字列を受け取り, 文字列に書かれた式を計算するようなコードを書いてみましょう

  • ドはまり

    • subroutin 1+9 ってやると、サブルーチン内の@_に渡す時点で計算されてしまう。
    • 半日くらい悩み、subroutin (1+9)とすることで文字列のまま渡せそうと判明。
    • 理解したら「あぁ、そんなもんよね」って思うけどさ・・・一人だと、そこに至るまでのなんと険しいことか。
use strict;
use warnings;

sub calc_string {
    my $scaler = shift @_;
    if ( $scaler =~ /(\d+(\+|\-|\*|\/|\%)\d+)/ ) {
        return eval $scaler;
    }
    else {
        return "undef";
    }
}

while ( my $input = <STDIN> ) {
    chomp $input;
    print calc_string($input) . "\n";
}

packageの練習問題

PerlEntranceというpackageの中にtokyoとosakaという名前の, 引数を持たないサブルーチンを作りましょう
tokyoはpapix!!!, osakaはboolfool!!!という文字列を返す機能を持たせましょう

use strict;
use warnings;

package PerlEntrance {

    sub tokyo {
        print "papix!!!\n";
    }

    sub osaka {
        print "boolfool!!!\n";
    }
}

PerlEntrance::tokyo;
PerlEntrance::osaka;

モジュール

  • それでは, 自作モジュールを作っていきましょう

  • そこまでやるとは思ってなかった。すげえ。