2013-11-16 3 views
0

Итак, я пытаюсь использовать getpwnam() для поиска etc/passwd для имени пользователя в sub и возвращает true, если он существует. Я продолжаю получать ошибку «Использование неинициализированного значения в getpwnam».Perl getpwnam не работает в sub

sub nameSearch 
{ 
$search = $_; 
@name = getpwnam($search); 
if (! defined $name[0]) 
{ 
return 0; 
} 
else 
{ 
return 1; 
} 
} 

Я прохожу в эту подвешенную строку. Я пробовал только с помощью @name = getpwnam($_[0]) и @name = getpwnam($_)

Я знаю, как то, что строка я передаю существует как имя пользователя в/и т.д./пароль и код работает, когда его не в суб.

+0

Можете ли вы показать нам, как вы называете это 'sub', и как оно сравнивается с встроенной версией, которая предположительно работает? Кроме того, почему '' поиск '' и '@ name' не являются локальными для' sub'? то есть. 'my $ search' и' my @ name'? –

+0

Я немного нул в Perl, не понимал, что так назывались локальные переменные! Спасибо, что привлекли его к моему вниманию! – sh3rifme

ответ

1

Если вы передаете имя пользователя в качестве параметра, тогда вы должны проверить первый элемент @_, который является $_[0].

$_ - глобальная переменная, которая обычно используется как неявная foreach переменная и функция могут использовать ее в случае, если на нее не был отправлен параметр. На самом деле это обычное поведение для большинства функций ядра perl, которые принимают $_, если нет явного аргумента.

sub nameSearch { 
    my ($search) = @_; 
    $search = $_ if [email protected]_; 

    my @name = getpwnam($search); 

    return @name ? 1 : 0; 
} 

print nameSearch("user") ? "exist" : "doesn't exist"; 
+0

Спасибо! Работает хорошо! – sh3rifme

Смежные вопросы