我的问题很简单。但无法解决执行我的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上运行此脚本
答案 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()
运营商。