2011-10-19 27 views
17

tôi có thể làm như sau trong bash:Lấy giá trị trả về của một lệnh thực hiện sử dụng backticks trong Perl

output=`command` 
retcode=$? 

Có cách nào để làm điều tương tự trong Perl? Một cái gì đó như thế này:

$output=`command` 
$retcode=??? 
+1

Điều gì đã xảy ra khi bạn thử? :-) Nghiêm túc, chỉ cần cố gắng một cái gì đó như thế là sẽ được nhanh hơn nhiều so với yêu cầu một câu hỏi ở đây. –

Trả lời

21

Bạn có thể đọc biến số $? (như trong vỏ). Từ man perlvar

$?  The status returned by the last pipe close, backtick ("``") command, successful call to wait() or waitpid(), or from the 
       system() operator. This is just the 16-bit status word returned by the traditional Unix wait() system call (or else is made up 
       to look like it). Thus, the exit value of the subprocess is really ("$? >> 8"), and "$? & 127" gives which signal, if any, the 
       process died from, and "$? & 128" reports whether there was a core dump. (Mnemonic: similar to sh and ksh.) 

       Additionally, if the "h_errno" variable is supported in C, its value is returned via $? if any "gethost*()" function fails. 

       If you have installed a signal handler for "SIGCHLD", the value of $? will usually be wrong outside that handler. 

       Inside an "END" subroutine $? contains the value that is going to be given to "exit()". You can modify $? in an "END" 
       subroutine to change the exit status of your program. For example: 

        END { 
         $? = 1 if $? == 255; # die would make it 255 
        } 

       Under VMS, the pragma "use vmsish 'status'" makes $? reflect the actual VMS exit status, instead of the default emulation of 
       POSIX status; see "$?" in perlvms for details. 

       Also see "Error Indicators". 
0

Và kể từ Perl 5.10, bạn cũng có ${^CHILD_ERROR_NATIVE}.

Từ http://perldoc.perl.org/perl5100delta.html#New-internal-variables:

${^CHILD_ERROR_NATIVE}

Biến này cho trạng thái bản địa được trả về bởi các đường ống gần cuối cùng, backtick lệnh, cuộc gọi thành công để chờ đợi() hoặc waitpid(), hoặc từ Điều hành hệ thống. Xem perlvar để biết chi tiết.

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