我正在使用here中的代码:
#!/usr/bin/perl
use strict;
use warnings;
use Fcntl;
my $flags = "";
fcntl( STDIN, F_GETFL, $flags) || die $!;
$flags |= O_NONBLOCK;
fcntl( STDIN, F_SETFL, $flags) || die $!;
但是出现下一个错误:
Argument "\0O§"U\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0..." isn't numeric in bitwise or (|) at /home/user/inetd-script.pl line 9.
$flags
通过fcntl
调用进行初始化。请告诉我为什么会发生此错误。
以及解决方法。
UPD
Perl cookbook 7.20.2将其初始化为空字符串。
答案 0 :(得分:6)
按位运算符有两种形式,字符串和数字。如果任一操作数为数字,或启用了“按位”功能[^ 1],则将其视为按位数字。在这种情况下,如果另一个操作数是字符串,则会将其转换为数字,如果它看起来不像数字,则会生成警告。
您应该将$ flags初始化为0,而不是""
。
[^ 1]:“按位”功能使普通的按位运算符仅按数字进行按位运算,并添加了新的字符串按位运算符,例如|.
。