Как мне получить текущего пользователя в Perl портативным способом? - PullRequest
14 голосов
/ 20 августа 2010

Как получить текущего пользователя портативным способом?

Это похоже на FAQ, но perlport не говорит об этом, может быть, потому что некоторые странные системы не имеют понятия "пользователь", чтобы быть с Однако давайте придерживаться * nix и Windows.

getpwuid($>) не реализовано в Windows.

$ENV{USER} || $ENV{USERNAME} кажется привередливым.

http://search.cpan.org особо не появлялся.

Ответы [ 2 ]

19 голосов
/ 20 августа 2010

getlogin :

Это реализует функцию библиотеки C с тем же именем, которая в большинстве систем возвращает текущий логин из / etc / utmp, если таковой имеется.Если ноль, используйте «getpwuid».

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

Не рассматривайте «getlogin» для аутентификации: это не так безопасно, как «getpwuid».

Вы также можете попробовать || -ing это с POSIX :: cuserid () и Win32 :: LoginName ().

4 голосов
/ 20 августа 2010

Win32 :: LoginName () может использоваться в Windows для получения имени пользователя (без имени домена, поэтому оно может быть неоднозначным):

use Win32;
my $username = Win32::LoginName;

Win32 :: pwent реализует getpwuid () и другие функции для запроса базы данных пользователей.К сожалению, его не удалось установить на мой StrawberryPerl 5.12.

...