代码之家  ›  专栏  ›  技术社区  ›  Rini

glob如何返回不存在的“文件名”?

  •  2
  • Rini  · 技术社区  · 16 年前

    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,确实会返回一个数组。

    3 回复  |  直到 9 年前
        1
  •  5
  •   Greg Hewgill    16 年前

    Perl版本5.005_02是 古代的 (用Perl术语)。该版本可能有不同的 glob 它不会返回不存在的文件名。正如您所注意到的,Perl的更高版本的工作方式有所不同。

        2
  •  2
  •   Carl Norum    16 年前

    #!/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♣
    
        3
  •  1
  •   user80168 user80168    16 年前

    但是使用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;
    

    my @deck;
    for my $card ( @cards ) {
        for my $color ( @colors ) {
            push @deck, "$card$color";
        }
    }