在Perl中,如何检查单词是否以数字开头

在Perl中,如何检查单词是否以数字开头,perl,Perl,下面是我检查单词是否以数字开头的代码: #!/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

下面是我检查单词是否以数字开头的代码:

    #!/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\u letter
时,它总是显示
1
。请帮助。

第一个问题:
@ARGV
是一个数组。当你做
my$domain\u name=@ARGV,您正在“标量”上下文中使用“数组”(即,简单地说,您试图将数组分配给标量)

print "first letter is digit\n" if $ARGV[0] =~ /^\d/;
在这种情况下,
perl
将数组的用法替换为数组中的元素数。在本例中,
1
(因为
@ARGV
数组似乎包含1个元素)。相反,您真正想做的是找出
$ARGV[0]
中的第一个元素,即第一个参数,是否是数字

第二个问题:这类事情应该使用正则表达式。正确的实施应该是一行:

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

=~/^\d/
表示:“以数字开头”。

\d
匹配460个字符。如果只想匹配0..9,请使用
[0-9]