2010-08-19 28 views
13

Làm cách nào để người dùng hiện tại theo cách di động?Làm cách nào để có được người dùng hiện tại trong Perl theo cách di động?

Điều này có vẻ giống như Câu hỏi thường gặp nhưng perlport không nói về điều đó, có thể vì một số hệ thống lẻ không có khái niệm "người dùng" để ở cùng? Tuy nhiên, hãy dính vào * nix và Windows.

getpwuid($>) không được triển khai trên Windows.

$ENV{USER} || $ENV{USERNAME} có vẻ khó xử.

http://search.cpan.org không tăng lên nhiều.

+0

đây có phải là tập lệnh CGI hay một tập lệnh (ứng dụng tập lệnh) không? – vol7ron

Trả lời

19

getlogin:

này thực hiện các chức năng thư viện C cùng tên, mà trên hầu hết các hệ thống trả về đăng nhập hiện tại từ/etc/utmp, nếu có. Nếu null, sử dụng "getpwuid".

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

Đừng xem "getlogin" để xác thực: nó không an toàn như "getpwuid".

Bạn cũng có thể thử || -ing this with POSIX::cuserid() và Win32::LoginName().

+7

Nếu bạn đã chuyển đổi người dùng bằng su, getlogin sẽ trả lại người dùng ban đầu, điều gì đó sẽ gây bất ngờ cho tôi với tư cách người dùng; chỉ cần sử dụng getpwuid cho hệ thống posixy và Win32 :: LoginName cho các cửa sổ. – ysth

+0

@ysth: tốt để biết. Tôi hy vọng đây là những gì các tài liệu được ám chỉ trong "Đừng xem xét .. để xác thực". – Ether

4

Win32::LoginName() có thể được sử dụng trên Windows để lấy tên người dùng (không có tên miền, vì vậy nó có thể là mơ hồ):

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

Win32::pwent thực hiện getpwuid() và các tính năng khác để truy vấn cơ sở dữ liệu người dùng. Thật không may, nó không thể cài đặt trên StrawberryPerl 5.12 của tôi.

Các vấn đề liên quan