$ perl -e 'use warnings;my ($a,$b);$c=$a.$b;print $c'
Use of uninitialized value in concatenation (.) or string at -e line 1.
Use of uninitialized value in concatenation (.) or string at -e line 1.
我看到如何避免在串联(。)中使用未初始化的值?在Perl v5.8.4
我决定
use 5.8.4;
use strict;
use warnings;
use Test::More tests => 2;
my ($start, $end, $sysid, $ver, $tradetype);
($start, $end) = (1, 10);
my $test = make_string($start, $end, $sysid, $ver, $tradetype);
is($test, "1,10,,,\n", "make index string");
is(make_string(0, 0, 0, 0, 0,), "0,0,0,0,0\n", "test number");
sub make_string {
my @input = @_;
my @input_init = map { !defined $_ ? '' : $_ } @input;
my $rezult = join q{,}, @input_init;
return $rezult . "\n";
}
我决定的问题,但我我想知道这个问题怎么能在别人需要解决
你看什么? (“我明白这一点”在这方面并不完整。)你决定了什么?在调用'make_string()'之前,你还没有初始化'$ sysid','$ ver'和'$ tradetype'。你应该真的考虑升级到Perl 5.14.1(你是当前的三个主要版本)。 (FWIW:你的测试代码在我的Mac上使用5.10.0和5.14.1干净地工作,我没有编译Perl 5.8.x。) –
@JonathanLeffler第二个例子工作。在'sub make_string'中,他用三元运算符和map初始化它们。但我仍然不明白他的问题。我想这是关于第一个例子。 – dave
@tze,这可能是因为他没有提出问题。 – ikegami