Perl - getlogin、getpwuid 和 $<

Che*_*eso 6 authentication testing perl function

想要了解 @ perldoc.perl.org给出的示例代码行getlogin

$login = getlogin || getpwuid($<) || "Kilroy";

getlogin它似乎尝试从或获取用户名getpwuid,但如果其中一个失败,请Kilroy改为使用。我可能是错的,所以请纠正我。另外,我一直在以前的脚本中使用-和getlogin()之间有什么区别吗? getlogin()getlogin

这段代码是为了防范什么?另外,$<这样做的目的是什么?$<在查找它是什么及其用途时,我不太确定要搜索什么。


编辑
在特殊变量部分找到了这个 - 仍然不知道为什么需要它或者上面的示例中的作用

$<
Run Code Online (Sandbox Code Playgroud)

该进程的真实uid。(助记:如果您正在运行 setuid,那么它就是您来自的 uid。)您可以使用 POSIX::setuid() 同时更改真实 uid 和有效 uid。由于对 $< 的更改需要系统调用,因此检查 $! 更改后尝试检测任何可能的错误。


编辑x2

这条线与上面的例子有可比性吗?(目前我用它来避免“cron”执行脚本的任何潜在问题 - 我从未遇到过这个问题,但我试图避免任何理论问题)

my $username = getlogin(); if(!($username)){$username = 'jsmith';}

Cfr*_*eak 4

你说得完全正确。如果getlogin返回 false 它将测试getpwuid($<)如果返回 false 它将设置$login为“Kilroy”

$<是进程的真实uid。即使您在 setuid 环境中运行,它也会返回进程启动时的原始 uid。

编辑以匹配您的编辑:)

getpwuid通过 UID 返回用户名(在标量上下文中,就是这里的情况)。您需要$<作为一个参数,以防程序在某个时刻切换 UID($<是它启动时使用的原始 UID)