[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