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],第一个参数,是否是一个数字。

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

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 回答