Perl で分かったこと

および、分かってないこと。

  • for と foreach は同じものなんだって

(バージョンで微妙に違うらしいけど)同じらしい。へぇへぇへぇへぇ...

  • || と or は同じじゃないの?

open INHANDLE, "< a:\\abc.bin" || die "hoge";
open INHANDLE, "< a:\\abc.bin" or die "hoge";
だと、フロッピーディスクを抜いてあるときに挙動が違うがなぜだ?
前者(||)だとメッセージが出ない。後者(or)だとちゃんとメッセージが出る。

  • ファイルハンドルって my を付けられないの?

ディレクトリを再帰的に検索するようなときに、どうすりゃいいんっだ?

sub myopen {
    my $file = $_[0];
    opendir(DIR, $file);
    while (my $name = readdir(DIR)) {
        if ($name eq ".") {
            next;
        }
        if ($name eq "..") {
            next;
        }
        print $file . $name . "\n";
        myopen($file . $name);
    }
    closedir(DIR);
}

だとうまくいかない。おそらく変数 DIR が重複して使われてしまう。

sub myopen {
    my $file = $_[0];
    opendir(my $DIR, $file);
    while (my $name = readdir($DIR)) {
        if ($name eq ".") {
            next;
        }
        if ($name eq "..") {
            next;
        }
        print $file . $name . "\n";
        myopen($file . $name);
    }
    closedir($DIR);
}

だとうまく動くが、でもファイルハンドルって $ 付けたらダメな慣習があるんだよね?って言うかなんで $ 付けても動くのに付けたらダメなの?