Perl - Использование неинициализированной ценности?
Итак, я пытаюсь запустить этот код...
my $filePath = $ARGV['0'];
if ($filePath eq ""){
print "Missing argument!";
}
Он должен проверить первый аргумент командной строки и сказать мне, если он пуст, но он возвращает эту ошибку, и я не могу понять, почему:
Use of uninitialized value $filePath in string eq at program.pl line 19.
Что я делаю неправильно?
Ответы
Ответ 1
Просто проверьте, существует ли $ARGV [0]
#!/usr/bin/perl
use strict;
use warnings;
if(!defined $ARGV[0]){
print "No FilePath Specified!\n";
}
Это будет печатать "No FilePath Specified!\n", если не было переданной командной строки.
Проблема, с которой вы работаете, заключается в том, что вы устанавливаете $filePath в значение undefined. Предупреждения жалуются, потому что вы попытались сравнить значение undefined с "". Предупреждения думают, что стоит рассказать вам о.
Я использовал свой пример, чтобы показать чистый способ проверки, если что-то определено, но технически для этого вы также можете просто сделать:
if([email protected]){
print "No FilePath Specified!\n";
}
Ответ 2
Пустые и неинициализированные - это не одно и то же. Вы можете проверить, инициализирована ли переменная с помощью оператора defined
, например, например:
if ((!defined $filePath) || ($filePath eq "")) {
# $filePath is either not initialized, or initialized but empty
...
}
Я уверен, что вы имели в виду это:
my $filePath = $ARGV[0];
(без кавычек)
Ответ 3
Альтернативный ответ - установить значение по умолчанию, если оно не определено:
my $filePath = $ARGV[0] // '';
Ответ 4
EDIT: Как заметил @Andrew, это не то же самое, что и с именем файла "0"
Кроме того, вместо
if ((! defined $filePath) || ($ filePath eq "")) {...
как писал @Mat. вы можете использовать более простой
if (! $filePath) {...
который выполняет точно такие же