This answer表示glob有时会返回不存在的'文件名'。
@deck = glob "{A,K,Q,J,10,9,8,7,6,5,4,3,2}{\x{2660},\x{2665},\x{2666},\x{2663}}";
但是,当我运行它时,该代码会返回一个空列表。
我错过了什么?
此运行来自Windows XP上使用-e的命令提示符,ActiveState Perl版本为5.005_02。从同一台机器上保存的脚本运行会产生相同的结果。
在Windows XP上运行-e,使用ActiveState Perl v5.8.7,确实会返回一个数组。
答案 0 :(得分:5)
Perl版本5.005_02是古代(以Perl术语表示)。该版本可能具有glob
的不同实现,它不返回不存在的文件的名称。正如您所注意到的,Perl的更高版本的工作方式不同。
答案 1 :(得分:2)
在我的机器上运行正常,v5.10.0。
#!/usr/bin/perl
@deck = glob "{A,K,Q,J,10,9,8,7,6,5,4,3,2}{\x{2660},\x{2665},\x{2666},\x{2663}}";
print @deck
作为输出:
A♠A♥A♦A♣K♠K♥K♦K♣Q♠Q♥Q♦Q♣J♠J♥J♦J♣10♠10♥10♦10♣9♠9♥9♦9♣8♠8♥8♦8♣7♠7♥7♦7♣6♠6♥6♦6♣5♠5♥5♦5♣4♠4♥4♦4♣3♠3♥3♦3♣2♠2♥2♦2♣
答案 2 :(得分:1)
它适用于我 - 即它产生一副牌,我使用perl 5.8.8。
但是。使用glob似乎很奇怪 - 我的意思是 - 确定,这是可能的,但是glob是一个匹配文件的工具,不能保证实际检查文件,但是没有人说它会不将来匹配文件!
我肯定会采用另一种方法。例如:
my @cards = qw( A K Q J 10 9 8 7 6 5 4 3 2 );
my @colors = ( "\x{2660}", "\x{2665}", "\x{2666}", "\x{2663}" );
my @deck = map {
my $card = $_;
map { "$card$_" } @colors
} @cards;
或者,如果你发现地图{map}太神秘了:
my @deck;
for my $card ( @cards ) {
for my $color ( @colors ) {
push @deck, "$card$color";
}
}