Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

eval require and "Inappropriate I/O control operation"

by siberia-man (Friar)
on Mar 29, 2018 at 15:34 UTC ( [id://1211985]=perlquestion: print w/replies, xml ) Need Help??

siberia-man has asked for the wisdom of the Perl Monks concerning the following question:

Hello folks,

I met very strange issue with the code responsible for loading the modules. There is set of modules responsible for processing different data. If some module which name is defined in $cn doesn't exist, then the current module will process the current portion of data. No problem with this.

eval { require "relative/path/to/$cn.pm"; }; if ( $@ && $@ !~ m/Can't locate/ || $! && $! !~ m/No such file or directory/ ) { warn "$@" if $@; warn "$!" if $!; die "Stop due to error!\n"; }

Weirdness happens when some input is tested under different environments. It works properly in linux and cygwin (1.7.25) with embedded perl (5.14.2). Troubles begin under Windows 7 with Straberry Perl (5.16.2). Sometimes (!!!), not always the same input produces the error Inappropriate I/O control operation (that comes from $!).

I googled this issue but answers on StackOverflow, here and other resources don't give clear description for my case.

1. At this moment it is not clear to me why this happens in some environment and doesn't happen in others.

2. The second question is will it be safe, if I remove everything related to $! as below and keep the code related to $@ for eliminating the absence of some modules?

eval { require "relative/path/to/$cn.pm"; }; if ( $@ && $@ !~ m/Can't locate/ ) { warn "$@" if $@; die "Stop due to error!\n"; }

Replies are listed 'Best First'.
Re: eval require and "Inappropriate I/O control operation"
by ikegami (Patriarch) on Mar 29, 2018 at 15:56 UTC

    $! isn't meaningful there. $! is only meaningful after a system call returned an error.

      A-ha! $! is useless in this case. Thank you!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1211985]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (7)
As of 2024-04-16 07:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found