12 my $nonfile = tempfile();
14 @INC = qw(Perl Rules);
16 # The tests for ' ' and '.h' never did fail, but previously the error reporting
17 # code would read memory before the start of the SV's buffer
19 for my $file ($nonfile, ' ') {
24 like $@, qr/^Can't locate $file in \@INC \(\@INC contains: @INC\) at/,
25 "correct error message for require '$file'";
28 eval "require $nonfile";
30 like $@, qr/^Can't locate $nonfile\.pm in \@INC \(\@INC contains: @INC\) at/,
31 "correct error message for require $nonfile";
34 require "$nonfile.ph";
37 like $@, qr/^Can't locate $nonfile\.ph in \@INC \(did you run h2ph\?\) \(\@INC contains: @INC\) at/;
39 for my $file ("$nonfile.h", ".h") {
44 like $@, qr/^Can't locate \Q$file\E in \@INC \(change \.h to \.ph maybe\?\) \(did you run h2ph\?\) \(\@INC contains: @INC\) at/,
45 "correct error message for require '$file'";
48 eval 'require <foom>';
49 like $@, qr/^<> should be quotes at /, 'require <> error';
51 my $module = tempfile();
52 my $mod_file = "$module.pm";
54 open my $module_fh, ">", $mod_file or die $!;
55 print { $module_fh } "print 1; 1;\n";
58 chmod 0333, $mod_file;
61 skip_if_miniperl("these modules may not be available to miniperl", 2);
65 require File::Spec::Functions;
66 if ($^O eq 'cygwin') {
70 # Going to try to switch away from root. Might not work.
71 # (stolen from t/op/stat.t)
74 skip "Can't test permissions meaningfully if you're superuser", 2
75 if ($^O eq 'cygwin' ? Win32::IsAdminUser() : $> == 0);
80 qr<^\QCan't locate $mod_file:>,
81 "special error message if the file exists but can't be opened";
83 my $file = File::Spec::Functions::catfile(Cwd::getcwd(), $mod_file);
88 qr<^\QCan't locate $file:>,
89 "...even if we use a full path";
91 # switch uid back (may not be implemented)
92 eval { $> = $olduid; };
95 1 while unlink $mod_file;
97 # I can't see how to test the EMFILE case
98 # I can't see how to test the case of not displaying @INC in the message.
99 # (and does that only happen on VMS?)