本日はコードが冗長になりがち。
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件) を見る