[Omaha.pm] Proper way to test a variable with strict and -w?
Jay Hannah
jay at jays.net
Fri Sep 2 05:01:27 PDT 2005
On Sep 1, 2005, at 10:35 AM, Daniel Linder wrote:
> use Env qw(EnvVar1 EnvVar2);
>
> my $EnvVar1="DefaultValue1" if ("" eq "$EnvVar1");
> my $EnvVar2="DefaultValue2" if ("" eq "$EnvVar2");
> my $Var3 = "$EnvVar1 -- $EnvVar2";
>
> When I run it, the perl interperter complains about "Use of
> uninitialized value in concatenation" on the "Var3" line (the last
> line.
>
> Did I mess things up by putting the "my" on the "EnvVar1" and
> "EnvVar2" lines -- these variables should be defined on the "use Env"
> line, right?
As I read "perldoc Env" I would say that your use Env line is declaring
those two values for you, so your first two my's are redundant. That
said, I don't understand why Perl would throw that warning.
> If you were to re-write this whole section, how would you do it?
Assuming 0 is never a legitimate value for those two environment
variables, I'd do this:
#!/usr/bin/perl -w
use Env qw(EnvVar1 EnvVar2);
$EnvVar1 ||= "DefaultValue1";
$EnvVar2 ||= "DefaultValue2";
my $Var3 = "$EnvVar1 -- $EnvVar2";
Actually, I wouldn't 'use Env' at all. That's just a "shortcut" for
Perl's built-in %ENV. I'd do this:
#!/usr/bin/perl -w
$ENV{Var1} ||= "DefaultValue1";
$ENV{Var2} ||= "DefaultValue2";
my $Var3 = "$ENV{Var1} -- $ENV{Var2}";
HTH,
j
More information about the Omaha-pm
mailing list