2

この回答は、グロブが存在しない「ファイル名」を返す場合があることを示しています。

@deck = glob "{A,K,Q,J,10,9,8,7,6,5,4,3,2}{\x{2660},\x{2665},\x{2666},\x{2663}}";

ただし、そのコードを実行すると空のリストが返されます。

私は何が欠けていますか?


この実行は、ActiveState Perl バージョン 5.005_02 を使用した Windows XP で、-e を使用してコマンド プロンプトから実行されました。同じマシンに保存されたスクリプトから実行すると、同じ結果が得られます。

ActiveState Perl v5.8.7 を使用して Windows XP で -e を指定して実行すると、配列が返されます。

4

3 に答える 3

5

Perlバージョン5.005_02は古くからあります(Perl用語で)。そのバージョンにはおそらく、glob存在しないファイルの名前を返さない別の実装があります。お気づきのように、Perlの新しいバージョンでは動作が異なります。

于 2009-10-05T21:38:59.697 に答える
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♣
于 2009-10-05T20:57:20.920 に答える
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{map} が不可解すぎる場合:

my @deck;
for my $card ( @cards ) {
    for my $color ( @colors ) {
        push @deck, "$card$color";
    }
}
于 2009-10-06T06:48:47.820 に答える