How does one get the current user in a portable way?
This seems like an FAQ but perlport doesn't speak about it, maybe because some odd systems don't have the concept of "user" to being with? However, let's stick to *nix and Windows.
getpwuid($>)
is not implemented on Windows.
$ENV{USER} || $ENV{USERNAME}
seems finicky.
http://search.cpan.org didn't turn up much.
getlogin:
This implements the C library function of the same name, which on most systems returns the current login from /etc/utmp, if any. If null, use "getpwuid".
$login = getlogin || getpwuid($<) || "Kilroy";
Do not consider "getlogin" for authentication: it is not as secure as "getpwuid".
You can also try ||-ing this with POSIX::cuserid() and Win32::LoginName().
Win32::LoginName() can be used on Windows to retrieve the user name (without the domain name, so it may be ambiguous):
use Win32;
my $username = Win32::LoginName;
Win32::pwent implements getpwuid() and other features to query the user database. Unfortunately, it failed to install on my StrawberryPerl 5.12.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With