2009-02-04 3 views
10

Tôi cần đặt biến môi trường từ bên trong Perl. Lý tưởng nhất, tôi cần phải truy vấn một biến và sau đó thay đổi nó nếu nó không phải là những gì được yêu cầu. Cụ thể là biến PATH mà tôi muốn thay đổi.Làm cách nào để đặt biến Windows PATH từ Perl?

Làm cách nào để nhận và đặt các biến này?

Trả lời

16

Nếu bạn cần thay đổi các biến môi trường trên toàn cầu và vĩnh viễn, như nếu bạn đặt nó trong bảng điều khiển, sau đó bạn phải muck with the registry (Cập nhật: và bây giờ có các mô-đun để thực hiện việc này, Win32::EnvWin32::Env::Path). Lưu ý rằng việc thay đổi các biến trong đăng ký và "phát sóng" thay đổi sẽ không thay đổi các biến môi trường trong một số quy trình hiện tại, đặc biệt là perl.exe và cmd.exe.

Nếu bạn chỉ muốn thay đổi quy trình hiện tại (và sau đó sinh ra quy trình con), thì biến số băm% ENV toàn cầu là những gì bạn muốn (ví dụ: $ ENV {PATH}). Xem perldoc perlvar.

+0

Xem http://search.cpan.org/~adamk/Win32-Env-Path-0.01/lib/Win32/Env/Path.pm cho một mô-đun dường như làm nhiều hơn hoặc ít hơn những gì được mô tả trong nút perlmonks đó. – oeuftete

+0

Cảm ơn, tôi không biết về các mô-đun đó ... và chúng không tồn tại tại thời điểm nút perlmonks. – runrig

+0

Điều đó có thể có cảm hứng rất tốt từ bài đăng của bạn ... ai biết được. :) Nó không giống như nó bao gồm bước của bạn từ nút PM để phát sóng bản cập nhật. – oeuftete

7

$ ENV {PATH}?

Hãy nhớ rằng các biến môi trường chỉ ảnh hưởng đến các quy trình con. Bạn không thể chạy chương trình Perl, thay đổi% ENV và sau đó thấy thay đổi đó trong tiến trình cha - môi trường không hoạt động theo cách đó.

+0

LOL, chúng tôi đã quản lý để gửi cùng một câu trả lời trong cùng một giây! :-p –

+0

Tâm trí tuyệt vời nghĩ như nhau;) – jrockway

+0

Ack, đó chỉ là những gì tôi muốn làm. Cảm ơn bạn đã trả lời anyway – Xetius

4

Bạn có thể làm điều đó bằng cách sử dụng %ENV băm

$ENV{PATH} = 'C:\\Windows\;D:\\Programs';