第11章 ファイルハンドルとファイルテスト 練習問題 その1

ファイルを読んだり書いたり。

1.入力ファイルの内容をを指定の正規表現で置換して、ファイルに出力するプログラム

#!/usr/bin/env perl -w
use strict;

print "in-file: ";
chomp(my $infile = <STDIN>);
open INFILE, "< $infile" or die "No such file named $infile\n";

print "out-file: ";
chomp(my $outfile = <STDIN>);
open OUTFILE, "> $outfile" or die "No such file named $outfile\n";

print "pattern: ";
chomp(my $pattern = <STDIN>);

print "new-string: ";
chomp(my $newstr = <STDIN>);

while (<INFILE>) {
    s/$pattern/$newstr/;
    print OUTFILE;
}

new-stringには$1とか\u\Lとかのエスケープ文字を指定しても、その意味では動作しない。たんにその見たままの文字列が表示されるだけ。$newstrに入った時点で評価されてるから。

2. コマンドラインから渡したファイルのパーミッションを表示するプログラム

#!/usr/bin/env perl -w
use strict;

sub filetest {
    my $fname = shift;
    my $status = "$fname:\t";

    unless (-e $fname) {
        return $status .= "not exists";
    }

    if (-r $fname) {
        $status .= 'r';
    } else {
        $status .= '-';
    }

    if (-w $fname) {
        $status .= 'w';
    } else {
        $status .= '-';
    }

    if (-x $fname) {
        $status .= 'x';
    } else {
        $status .= '-';
    }
    $status;
}

foreach (@ARGV) {
    print &filetest($_) . "\n";
}

filetestサブルーチンはファイルテストの内容に応じた文字列を返します。実行結果は、

ex10-1.pl:      rw-
ex10-1.pl~:     rw-
ex11-1.pl:      rwx
ex11-1.pl~:     rwx
ex11-2.pl:      rwx
ex11-2.pl~:     rwx

という風。解答だと配列を使って出力が工夫されていた。

初めてのPerl

初めてのPerl

  • 作者: ランダル・L.シュワルツ,トムフェニックス,Randal L. Schwartz,Tom Phoenix,近藤嘉雪
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2003/05
  • メディア: 単行本
  • 購入: 15人 クリック: 474回
  • この商品を含むブログ (294件) を見る