Perl getpwnam在sub中失败

时间:2013-11-16 16:49:28

标签: perl getpwnam

所以我试图使用getpwnam()在etc / passwd中搜索sub中的用户名,如果存在则返回true。我一直收到错误“在getpwnam中使用未初始化的值”。

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

我正在将一个扼流的字符串传递给这个子。我试过使用@name = getpwnam($_[0])@name = getpwnam($_)

我知道我传递的字符串作为/ etc / passwd中的用户名存在,并且当代码不在sub中时代码可以工作。

1 个答案:

答案 0 :(得分: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";
相关问题