コードを舐める日々

わからないことがわからないことをしる日々

該当フォルダ内のファイル名を取得する方法

Perlを学び始めて1週間強といったところで、Perlは本当に驚く書き方が多い。

#!/usr/bin/perl

use strict;
use warnings;

my $logdir = "./log"; #読み込む該当フォルダ名
opendir(DIR, $logdir);
my @FILES = readdir(DIR);
closedir(DIR);
print @FILES;

しかし、opendir関数を使うことはナンセンスらしい。
しかも隠れファイル(.とか)まで余分に読み込んでしまう。

この記事を読んで試してみた。

スリムに書くと下記の通り。

#!/usr/bin/perl

use strict;
use warnings;

while(<./log/*>){
    print $_."\n";
}

簡潔にできてしまう。

$_を省略したものでもおk。

#!/usr/bin/perl

use strict;
use warnings;

while(<./log/*>){
    print ."\n";
}

<>の部分はダイヤモンド演算子といってPerlの父であるLarry Wall氏のお嬢さんが5歳の時に"<>"をみて
「これはダイヤモンドよ!」ということで名付けられたそうだ。(情報ソース:初めてのPerl第三版)
ある意味、Perlはマジックのようなものだな。。

もしファイルの中身も読み込むとしたらこう書くだろうか。

#!/usr/bin/perl

my @log_fh = ();
open $log_fh;

while(<./log/*>){
    print $_."\n";
    open(FILE, $_);
    @log_fh = <FILE>;
    close(FILE);
}
print @log_fh;