Perl“else”语句没有执行

时间:2013-09-25 05:11:22

标签: perl if-statement

我使用ActivePerl脚本接收CSV文件并创建加载到数据库中的XML文件。这些是用户ID数据库条目,名称,地址等。我们一直使用家庭电话号码字段来生成初始密码(我们鼓励用户立即更改!)。手机的普及意味着我有很多人没有家用电话,所以我想在家庭电话领域为空时使用手机领域。

我的输入字段如下所示:

#   0 Firstname
#   1 Lastname
#   2 VP (voicepart)
#   3 Address
#   4 City
#   5 State
#   6 Zip
#   7 Phone
#   8 Mobile
#   9 Email

这是我用来创建密码的Perl代码 - 当字段7中有值时,create_password子例程正在工作:

my $pass_word = '';
my $pass_word = create_password($fields[7]);
if (my $pass_word = '') { 
  print "Use the cell phone number \n";
  my $pass_word = create_password($fields[8]);
}

“打印”声明是告诉我它认为它正在做什么。

这让我觉得它应该有效,但“if”的声明从未触发过。 Print语句不打印,只有字段8中的值的任何人都会生成密码。我测试$ pass_word的值的方式一定有问题,但我看不到它。我应该测试$ fields [7]和$ fields [8]的值而不是变量值吗?如果这不起作用,你如何测试Perl变量的空值?

3 个答案:

答案 0 :(得分:8)

您的代码中存在多个问题。

首先,在使用my声明变量后,在使用变量时不需要在变量之前添加my;

其次,对于这一行:

if (my $pass_word = '')

我认为你的意思是

if ($pass_word == '')

my已删除,如第一点所述)

=表示赋值,它返回您分配给$pass_word的值,此处为'',这就是为什么此条件始终返回false。

但是,==在这里不正确。在perl中,我们使用eq来比较两个字符串。 ==用于比较数字。

因此,请移除除第一个之外的所有my,并使用eq来比较您的字符串。

答案 1 :(得分:5)

你在这里遇到两个主要问题。

首先是你的字符串相等测试。在Perl中,使用运算符eq比较字符串的相等性(如$string eq 'something'中所示)。 =是赋值运算符。

第二个是你(ab)使用my。每个my声明一个“隐藏”前一个变量的新变量,因此实际上你永远不能重复使用它的值,每次都要面对undef

=替换为eq条款中的if;删除除my的所有首次使用以外的所有内容,您应该设置!

答案 2 :(得分:2)

my声明一个新变量,该变量在周围范围内隐藏具有相同名称的变量。删除过度使用my