Аргумент не является числовым в побитовом или (|) в. Зачем? - PullRequest
0 голосов
/ 25 июня 2019

Я использую код от здесь :

#!/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 инициализировал его как пустую строку.

enter image description here

1 Ответ

6 голосов
/ 25 июня 2019

Битовые операторы имеют два вида: строковый и числовой.Если любой из операндов является числовым или включена «побитовая» функция [^ 1], он обрабатывается как числовой побитовый.В этом случае, если другой операнд является строкой, он преобразуется в число, и генерируется предупреждение, если оно не похоже на число.

Вы должны инициализировать $ flags как 0, а не как"".

[^ 1]: «побитовая» функция заставляет обычные побитовые операторы выполнять только числовые побитовые операции и добавляет новые строковые побитовые операторы, такие как |..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...