如何以便携方式获取Perl中的当前用户?

Dan*_*scu 14 perl portability

如何以便携方式获得当前用户?

这看起来像是常见问题,但是perlport并没有谈到它,也许是因为一些奇怪的系统没有"用户"的概念?但是,让我们坚持使用*nix和Windows.

getpwuid($>) 没有在Windows上实现.

$ENV{USER} || $ENV{USERNAME} 看起来很挑剔.

http://search.cpan.org没有发现太多.

Eth*_*her 19

getlogin:

这实现了同名的C库函数,在大多数系统上,它返回/ etc/utmp中的当前登录名(如果有的话).如果为null,请使用"getpwuid".

$login = getlogin || getpwuid($<) || "Kilroy";
Run Code Online (Sandbox Code Playgroud)

不要将"getlogin"视为身份验证:它不像"getpwuid"那样安全.

您也可以尝试使用POSIX :: cuserid()和Win32 :: LoginName()进行此处理.

  • 如果您使用su切换用户,getlogin将返回原始用户,这对我作为用户来说是一个令人不快的惊喜; 只需对posixy系统使用getpwuid,对windows使用Win32 :: LoginName. (7认同)