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;
モジュール
それでは, 自作モジュールを作っていきましょう
- そこまでやるとは思ってなかった。すげえ。