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";
Другие вопросы по тегам