我使用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变量的空值?
您的代码中有几个问题.
首先,在使用后声明变量之后,在使用变量时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比较您的字符串.
你在这里遇到两个主要问题.
第一个是你的字符串相等测试.在Perl中,使用运算符比较字符串的相等性eq(如$string eq 'something').=是赋值运算符.
第二个是你(ab)的使用my.每个都my声明一个"隐藏"前一个变量的新变量,所以实际上你永远不能重复使用它的值,你undef每次都要面对它.
替换=与eq您的if条款; 删除除了第一次使用之外的所有内容my,你应该设置!
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |