如何检查是否一个单词以数字开头,在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 == 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 。请帮忙。

+0

'\ d'匹配460个字符。如果你只想匹配0..9,那就用'[0-9]'代替。 – ikegami 2012-07-27 18:16:52

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

第一个问题:@ARGV是一个数组。当你做my $domain_name = @ARGV;时,你在“标量”的上下文中使用了一个“数组”(即简单地说,你试图将一个数组赋给一个标量)。

在这种情况下,perl将数组的使用替换为数组中元素的数量。在这种情况下,1(因为@ARGV数组似乎包含1个元素)。相反,你真正想要做的是找出第一个参数$ARGV[0]中的第一个元素是否是数字。

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

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

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