Как получить текущий пользователь на Perl в переносном режиме?
Как получить текущий пользователь переносимым способом?
Это похоже на часто задаваемые вопросы, но perlport не говорит об этом, может быть, потому, что некоторые нечетные системы не имеют понятия "пользователь" к тому, чтобы быть с? Однако, давайте придерживаться * nix и Windows.
getpwuid($>)
не выполняется в Windows.
$ENV{USER} || $ENV{USERNAME}
кажется довольно сложным.
http://search.cpan.org не сильно увеличилось.
Ответы
Ответ 1
getlogin:
Это реализует функцию библиотеки C с тем же именем, которая в большинстве систем возвращает текущий логин из /etc/utmp, если таковой имеется. Если значение null, используйте "getpwuid".
$login = getlogin || getpwuid($<) || "Kilroy";
Не учитывайте "getlogin" для аутентификации: он не так безопасен, как "getpwuid".
Вы также можете попробовать следующее: POSIX:: cuserid() и Win32::LoginName().
Ответ 2
Win32:: LoginName() можно использовать в Windows для извлечения имени пользователя (без имени домена, поэтому он может быть неоднозначным ):
use Win32;
my $username = Win32::LoginName;
Win32:: pwent реализует getpwuid() и другие функции для запроса пользовательской базы данных. К сожалению, он не смог установить на моем StrawberryPerl 5.12.