想了解@ perldoc.perl.orggetlogin提供的示例代码行

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

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

此代码可防止什么?另外,$<的作用是什么?我不确定在查找$<及其作用时要搜索的内容。

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

$<



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


编辑x2

这行与上面的示例可比吗? (目前,这是我用来避免“ cron”执行脚本的任何潜在问题的方法-我从未遇到过此问题,但我正尝试避免任何理论上的问题)

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

最佳答案

你说的没错如果getlogin返回false,它将测试getpwuid($<)如果返回false,则将$login设置为“ Kilroy”

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

编辑以匹配您的编辑:)

getpwuid通过UID返回用户名(在标量上下文中,情况就是这样)。如果程序在某个时候切换了UID($<是它开始时的原始ID),您可能希望将$<作为一个整数。

10-08 13:42