不适当的I / O控制操作

时间:2014-02-23 13:26:15

标签: perl syntax-error

我的问题很简单。但无法解决执行我的Perl脚本后收到的“不适当的I / O控制操作”错误。

#!C:/Perl/bin/perl.exe -w
use strict;

my $file = "D:/file.csv";
open(my $data, '<', $file) or die "Could not open '$file' $!\n";
while (my $line = <$data>) {
    chomp $line; 
    my @fields = split "," , $line;
    print $fields[1]."\n";
}

任何想法,我做错了什么?我在Windows7上的ActiveState perl上运行此脚本

1 个答案:

答案 0 :(得分:5)

我怀疑您的脚本是通过$!open && die $!打印open or die $!; print $!;的值。

这是一个在Windows上重现相同问题的最小脚本:

C:\> perl -e "open my $fh, '<', 'file_that_opens' && die $!"
Inappropriate I/O control operation

以下是* nix上发生的事情:

$ perl -e 'open my $fh, "<", "file_that_opens" && die $!'
Inappropriate ioctl for device

记录了此行为

根据perldoc perlvar$!仅在发生故障时才有意义。调用open时,会为$!设置一个值,但该值仅在open未成功时才有用:

  

... $!失败后仅立即才有意义:

if (open my $fh, "<", $filename) {
              # Here $! is meaningless.
    ...
}
else {        # ONLY here is $! meaningful.
    ...       # Already here $! might be meaningless.
}
# Since here we might have either success or failure,
# $! is meaningless.
     

在这里,无意义意味着$!可能与结果无关   open()运营商。