如何匹配perl glob中的数字

时间:2014-04-21 19:25:03

标签: regex perl glob

$dir_path = (-d ("./abc/dir-\d.\d.\d")) ?
            glob("./abc/dir-\d.\d.\d/my-dir*") : "my-dir-doesnot-exists";

这是一个有效的glob选项吗?我可以使用\ d来匹配目录路径中的数字吗?

如果“./abc/dir-#.#.#”存在(其中#是任何数字),那么 $ dir_path应该得到“./abc/dir-#.#.#/my-dir/some_dir_name”其他“ my-dir-doesnot-exists“string

1 个答案:

答案 0 :(得分:2)

您在标量上下文中调用glob的两个实例(但不是迭代器),这是非常错误的。例如,

 my $foo = glob("a");
 my $bar = glob("a");
 say $foo // "[undef]";    # a
 say $bar // "[undef]";    # [undef]

glob语言与正则表达式语言完全不同。 \d无法工作,但[0123456789]会。

my @dir_paths = glob("./abc/dir-[0123456789].[0123456789].[0123456789]/my-dir*");

die "No match!"         if !@dir_paths;
die "Too many matches!" if @dir_paths > 1;

my $dir_path = $dir_paths[0];