Perl - Use of uninitialized value?
Solution 1
Just check to see if $ARGV[0] is defined
#!/usr/bin/perl
use strict;
use warnings;
if(!defined $ARGV[0]){
print "No FilePath Specified!\n";
}
This will print "No FilePath Specified!\n" if there was none passed command line.
The problem you are running into, is you are setting $filePath to an undefined value. Warnings is complaining because you've then tried to compare an undefined value to "". Warnings thinks that is worth telling you about.
I used my example to show a clean way of checking if something is defined, but technically for this, you could also just do:
if(!@ARGV){
print "No FilePath Specified!\n";
}
Solution 2
Empty and uninitialized are not the same thing. You can check if a variable is initialized with the defined
operator, like for example:
if ((!defined $filePath) || ($filePath eq "")) {
# $filePath is either not initialized, or initialized but empty
...
}
I'm pretty sure you meant this:
my $filePath = $ARGV[0];
(without the quotes)
Solution 3
Alternative answer is to set a default value if it is not defined:
my $filePath = $ARGV[0] // '';
Related videos on Youtube
A Clockwork Orange
Updated on January 14, 2020Comments
-
A Clockwork Orange over 4 years
So I'm trying to run this code...
my $filePath = $ARGV['0']; if ($filePath eq ""){ print "Missing argument!"; }
It should check the first command line argument, and tell me if its empty, but it returns this error and I can not figure out why:
Use of uninitialized value $filePath in string eq at program.pl line 19.
What am I doing wrong?
-
nobody about 13 yearsNot 100% the same. That will treat the perfectly-legal filename "0" as false.
-
nobody about 13 yearsThe '||' option is not 100% the same. It will treat the perfectly-legal filename "0" as missing and provide the default instead.
-
ysth about 13 yearsI like:
if ( ! defined $filePath || ! length $filePath )