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

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

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

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

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

http://search.cpan.org не слишком часто появлялся.

14
задан casperOne 14 February 2013 в 12:58
поделиться

2 ответа

getlogin :

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

 $ login = getlogin || getpwuid ($ <) || «Килрой»;

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

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

19
ответ дан 1 December 2019 в 12:26
поделиться

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

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

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

4
ответ дан 1 December 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: