本日はコードが冗長になりがち。
1. ls -lの結果を出力するプログラム
ディレクトリの指定はハードコードすればよいらしいです。
#!/usr/bin/env perl -w use strict; # 指定のディレクトリに移動 my $dir = '/'; # ディレクトリの指定は直接書く(ハードコード) chdir $dir or die "can't change working directory to $dir: $_"; # ls -lを実行して結果を得る my $result = `ls -l`; print $result;
ここでは逆クォートを使ったけど、systemやexecなど方法はいっぱい。
2. 1のプログラムの出力先をファイルにする
標準出力をls.out、標準エラー出力をls.errに出力します。
#!/usr/bin/env perl -w use strict; # 標準出力と標準エラー出力をオープンし直す open STDOUT, "> ls.out" or die "can't open the file: $!"; open STDERR, "> ls.err" or die "can't open the file: $!"; my $dir = '/'; chdir $dir or die "can't change working directory to $dir: $_"; # 今度はexecで実行してみました exec 'ls -l' or die "can't execute the command: $!";
親プロセスの標準出力と標準エラー出力は子プロセスに引き継がれるので万事おk。
3. dateコマンドの結果を分析して、平日か休日かを調べる
Mac OS Xだとdateの出力が、
$ date 金 5 12 21:47:15 JST 2006
と日本語になります。やりにくいので、プログラムの中で英語で出力するようにしときますよ。
#!/usr/bin/env perl -w use strict; #英語で日付を取得して曜日を抽出 `LANG=C date` =~ /^(\S+)\b/; my $day = $1; if ($day =~ /Mon|Tue|Wed|Thu|Fri/) { # 平日 print "get to work\n"; } elsif ($day =~ /Sat|Sun/) { # 休日 print "go play"; }
正規表現で曜日の部分だけ取り出してマッチさせます。しかし、解答のコードはこれより相当シンプルです。解答をふまえて書き直すと、
#!/usr/bin/env perl -w use strict; if (`LANG=C date` =~ /^(Sun|Sat)/) { #休日 print "go play"; } else { # 休日以外 print "get to work\n"; }
短いゾー。たいそうな正規表現つかわなくてもちゃんと書けます。わかりやすいのがすてき。
- 作者: ランダル・L.シュワルツ,トムフェニックス,Randal L. Schwartz,Tom Phoenix,近藤嘉雪
- 出版社/メーカー: オライリージャパン
- 発売日: 2003/05
- メディア: 単行本
- 購入: 15人 クリック: 474回
- この商品を含むブログ (294件) を見る