我正在为简单的电子邮件编写模块。我有默认值,如果使用警告,则在字符串错误中使用初始化值。
代码:
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
我确定我失踪了一些明目张胆的东西..但它是什么?
答案 0 :(得分:1)
您发布的代码不是您正在使用的代码。来自您的评论:
if ($args{from}) { print "\nFROM: $args{from}\n" } else { print "\nFROM: root@system.com\n" }
由于您要对字符串进行双重引用,因此@system被插入并连接到字符串中。它没有初始化。这会导致错误。
答案 1 :(得分:-1)
您在逻辑上使用这些参数,即您可以在$args{*}
或true
进行评估时对其进行评估。
在严格模式下,您必须执行以下操作:
false