所以我试图使用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中时代码可以工作。
答案 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";