2

我需要从 $! 中的 sub 返回错误文本。但是很简单

 $! = "Error: Something is wrong!";

不起作用,它不会改变 $!。我该怎么做?

4

2 回答 2

5

$!是 C 库 var errno(一个数字)和它所代表的错误消息的反映(使用strerror或类似获得)。

您无法更改字符串,因为这是生成的值,但您可以更改数字。

$ perl -E'say $!=$_ for 1..10'
Operation not permitted
No such file or directory
No such process
Interrupted system call
Input/output error
No such device or address
Argument list too long
Exec format error
Bad file descriptor
No child processes

您的代码没有尝试设置errno,因此它应该使用自己的变量而不是弄乱$!(或使用 引发异常die)。

于 2013-05-11T03:58:55.490 回答
3

两种选择。

首先,Errno::AnyString

第二,不要这样做。 $!是特殊的,应该表示errno$YourModule::Error如果您需要传达特殊错误,请使用(或其他)。

于 2013-05-11T03:48:45.800 回答