Perl getpwnam терпит неудачу в сабе
Поэтому я пытаюсь использовать getpwnam() для поиска в etc/passwd имени пользователя в подпрограмме и возврата true, если оно существует. Я продолжаю получать сообщение об ошибке "Использование неинициализированного значения в getpwnam".
sub nameSearch
{
$search = $_;
@name = getpwnam($search);
if ( ! defined $name[0])
{
return 0;
}
else
{
return 1;
}
}
Я передаю взорванную строку в этот саб. Я пытался просто использовать @name = getpwnam($_[0])
а также @name = getpwnam($_)
Я знаю, как факт, что строка, которую я передаю, существует как имя пользователя в /etc/passwd, и код работает, когда его нет в подпрограмме.
1 ответ
Если вы передаете имя пользователя в качестве параметра, то вы должны проверить первый элемент @_
который $_[0]
,
$_
глобальная переменная, удобно используемая как неявная foreach
переменная и функция могут использовать ее в случае, если ей не был отправлен параметр. На самом деле это обычное поведение для большинства функций ядра Perl, которые принимают $_
если нет явного аргумента.
sub nameSearch {
my ($search) = @_;
$search = $_ if !@_;
my @name = getpwnam($search);
return @name ? 1 : 0;
}
print nameSearch("user") ? "exist" : "doesn't exist";