Perl"else"语句没有执行

hed*_*era 0 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
Run Code Online (Sandbox Code Playgroud)

这是我用来创建密码的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]);
}
Run Code Online (Sandbox Code Playgroud)

"打印"声明是告诉我它认为它正在做什么.

这看起来像我应该工作,但"if"的声明永远不会发生.Print语句不打印,只有字段8中的值的任何人都会生成密码.我测试$ pass_word的值的方式一定有问题,但我看不到它.我应该测试$ fields [7]和$ fields [8]的值而不是变量值吗?如果这不起作用,你如何测试Perl变量的空值?

Xu *_*ing 8

您的代码中有几个问题.

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

其次,对于这一行:

if (my $pass_word = '')
Run Code Online (Sandbox Code Playgroud)

我想你的意思

if ($pass_word == '')
Run Code Online (Sandbox Code Playgroud)

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

=表示赋值,它返回您分配给的值$pass_word,这''就是这个条件总是返回false的原因.

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

因此,删除my除第一个之外的所有内容,并用于eq比较您的字符串.


JB.*_*JB. 5

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

第一个是你的字符串相等测试.在Perl中,使用运算符比较字符串的相等性eq(如$string eq 'something').=是赋值运算符.

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

替换=eq您的if条款; 删除除了第一次使用之外的所有内容my,你应该设置!