下面是我的代码,用于检查单词是否以数字开头:
#!/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";
}
Run Code Online (Sandbox Code Playgroud)
但是当我打印时$first_letter,它总是在显示1.请帮忙.
Arj*_*kar 10
第一个问题: @ARGV是一个数组.当你这样做时my $domain_name = @ARGV;,你在"标量"的上下文中使用"数组"(即简单地说,你试图将数组分配给标量).
在这种情况下,perl使用数组中的元素数替换数组的用法.在这种情况下1(因为@ARGV数组似乎包含1个元素).相反,你真正想要做的是找出第$ARGV[0]一个参数中的第一个元素是否是一个数字.
第二个问题:你应该使用正则表达式来做这种事情.正确的实现将是一行:
print "First letter is digit\n" if $ARGV[0] =~ /^\d/;
Run Code Online (Sandbox Code Playgroud)
=~ /^\d/ 意思是:'以数字开头'.