0

我使用 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 变量的 null 值?

4

3 回答 3

8

您的代码中有几个问题。

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

其次,对于这一行:

if (my $pass_word = '')

我想你的意思是

if ($pass_word == '')

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

=表示赋值,它返回你赋给的值$pass_word,也就是''在这里,这就是为什么这个条件总是返回false。

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

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

于 2013-09-25T05:19:31.310 回答
5

这里有两个主要问题。

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

第二个是你(ab)使用my. 每个都my声明了一个“隐藏”前一个变量的新变量,因此实际上你永远无法重用它的值,你undef每次都会遇到。

在您的条款中替换=为;删除除第一次使用之外的所有,你应该被设置!eqifmy

于 2013-09-25T05:13:29.853 回答
2

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

于 2013-09-25T05:17:40.140 回答