「一気に最後まで読んだ」本、教えて下さい!

カレントディレクトリにディレクトリaaa, bbb, cccが在り、さらにそれぞれのディレクトリに11_2とか9_20などのような1から20までの数字を_で2個つなげたディレクトリが在ります。そのディレクトリの中のファイル名を出力する以下のスクリプトgetname.plを作成したのですが、
Unrecognized escape \d passed through at ./getname.pl line 9.
Unrecognized escape \d passed through at ./getname.pl line 9.
というエラーが出ます。全く原因がわからないでいます。もしよろしければ解決法をご教示いただけないでしょうか。どうぞよろしくお願いします。


#!/usr/bin/perl
use strict;
use warnings;

my @directory=qw/aaa bbb ccc/;

foreach my $dname (@directory)
{
opendir(DIR,"./$dname/\d+_\d+");
my @dir=readdir(DIR);
close(DIR);

print join("\n",@dir);
}

print "\n";

A 回答 (2件)

aaa, bbb, ccc のディレクトリをそれぞれ opendir で開いて、目的のディレクトリ (11_2, 9_20 等) を取得するようにすればうまくいくと思います。





#!/usr/bin/perl
use strict;
use warnings;

my @directory=qw/aaa bbb ccc/;

foreach my $dname (@directory) {
opendir(DIR,"./$dname") or die $!;
my @sdir = readdir(DIR);
close(DIR);
foreach my $sdir (@sdir) {
if (-d "./$dname/$sdir" and $sdir =~ /^\d+_\d+$/) {
opendir(DIR, "./$dname/$sdir") or die $!;
my @file = readdir(DIR);
close(DIR);
print join("\n", @file), "\n";
}
}
}
    • good
    • 0
この回答へのお礼

ご返信、遅れまして申し訳ありません。
詳細にスクリプトを書いていただきありがとうございました。勉強になります。
無事に成功しました。ありがとうございます。

お礼日時:2012/11/17 22:39

>全く原因がわからないでいます。



opendir()の引数に正規表現が使えるのでしょうか?
    • good
    • 0
この回答へのお礼

ご返事遅れまして申し訳ありません。本とperldocで調べたのですが、opendir()に正規表現が使えるのか、の明確な解答を見つけることができませんでした。
ただ、他の関数の扱いはあっているようですので、おそらく、おっしゃる通り、opendir関数に正規表現が使えないのだと思います。
ご解答、どうもありがとうございました。

お礼日時:2012/11/17 22:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!