Perl在模块中连接中使用未初始化的值

时间:2014-05-13 14:42:11

标签: perl module initialization arguments concatenation

我正在为简单的电子邮件编写模块。我有默认值,如果使用警告,则在字符串错误中使用初始化值。

代码:

my %args = @_;
%args = map {lc( $_ ) => $args{ $_ }} keys %args;

my %email = (
    to => $args{to} || 'group@gmail.com',
    from => $args{from} || 'other.group@gmail.com',
    subject => $args{subject} || 'Message From System X',
    message => $args{message} || 'An empty message?!',
);

基本上,如果没有传递参数,请使用默认值。然而,在启用使用警告的情况下,我得到了臭名昭着的

Use of uninitialized value in concatenation (.) or string at

我确定我失踪了一些明目张胆的东西..但它是什么?

2 个答案:

答案 0 :(得分:1)

您发布的代码不是您正在使用的代码。来自您的评论:

if ($args{from}) { print "\nFROM: $args{from}\n" } else { print "\nFROM: root@system.com\n" }

由于您要对字符串进行双重引用,因此@system被插入并连接到字符串中。它没有初始化。这会导致错误。

答案 1 :(得分:-1)

您在逻辑上使用这些参数,即您可以在$args{*}true进行评估时对其进行评估。

在严格模式下,您必须执行以下操作:

false