現在の tty のログインユーザーを取得する
getlogin は、現在の tty ログインユーザー名を返します。
もし現在の tty ログインユーザーが得られなければ、undef、
または、空文字列を返します。
my $user = getlogin || '[Unknown]';
print $user, "\n";
getlogin は Linux の utmp ファイルの内容から情報を取得しています。
例えば、Ubuntu なら utmp ファイルは /var/run/utmp にあります。
このファイルの内容を確認するには、who コマンドを使います。
$ who /var/run/utmp
futomi tty2 2023-08-03 09:04 (tty2)
もし、この utmp の仕組み、または、それに相当する仕組みがない環境では、
getlogin は undef を返します。
たとえば、Windows 11 上で動作する WSL (Windows Subsystem for Linux) が該当します。
なお、Windows 11 の PowerShell では、utmp は存在しませんが、
getlogin は期待通りに現在のユーザー名を返します。ただし、先頭 5 文字で切り取られます。
仮にシェルにログインした状態で getlogin がうまく動作したとしても、
cron、バックグラウンド処理、CGI での動作においては、必ずしもユーザー名を取得できるとは限りません。
もし getlogin でユーザー名が得られない場合は、
getpwuid($<) を試すと良いでしょう。