0

以下は、単語が数字で始まるかどうかを確認するコードです。

    #!/usr/bin/perl

    my $domain_name = @ARGV;

    my $first_letter = substr(($domain_name),0,1);
    print STDERR "first letter is $first_letter \n";

    if($first_letter eq  '0' || $first_letter == 1
       || $first_letter == 2 || $first_letter == 3 || $first_letter == 4
       || $first_letter == 5 || $first_letter == 6 || $first_letter == 7
       || $first_letter == 8 || $first_letter == 9) {

            print STDERR "$first_letter start with digit\n";

    } else {

            print STDERR "$domain_name does not starts with a digit\n";
    }

しかし、を印刷しているとき$first_letterは、常に表示され1ます。助けてください。

4

2 に答える 2

10

最初の問題: @ARGVは配列です。するとmy $domain_name = @ARGV;、「スカラー」のコンテキストで「配列」を使用しています (つまり、簡単に言えば、配列をスカラーに割り当てようとしています)。

このような場合、perl配列の使用法を配列内の要素数に置き換えます。この場合1(@ARGV配列に 1 つの要素が含まれているように見えるため)。代わりに、本当にやりたいことは$ARGV[0]、最初の引数である の最初の要素が数字かどうかを調べることです。

2 番目の問題:この種のものには正規表現を使用する必要があります。正しい実装は次の 1 行です。

print "First letter is digit\n" if $ARGV[0] =~ /^\d/;

=~ /^\d/意味:「数字で始まる」。

于 2012-07-27T11:56:20.840 に答える
4
print "first letter is digit\n" if $ARGV[0] =~ /^\d/;
于 2012-07-27T11:52:31.713 に答える