0

所以我正在尝试使用 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 中,并且代码在其不在子目录中时有效。

4

1 回答 1

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";
于 2013-11-16T18:11:53.737 回答