1#!./perl -w 2 3# 4# test auto defined() test insertion 5# 6 7BEGIN { 8 chdir 't' if -d 't'; 9 @INC = qw(. ../lib); 10 $SIG{__WARN__} = sub { $warns++; warn $_[0] }; 11} 12require 'test.pl'; 13plan( tests => 27 ); 14 15my $unix_mode = 1; 16 17if ($^O eq 'VMS') { 18 # We have to know if VMS is in UNIX mode. In UNIX mode, trailing dots 19 # should not be present. There are actually two settings that control this. 20 21 $unix_mode = 0; 22 my $unix_rpt = 0; 23 my $drop_dot = 0; 24 if (eval 'require VMS::Feature') { 25 $unix_rpt = VMS::Feature::current('filename_unix_report'); 26 $drop_dot = VMS::Feature::current('readdir_dropdotnotype'); 27 } else { 28 my $unix_report = $ENV{'DECC$FILENAME_UNIX_REPORT'} || ''; 29 $unix_rpt = $unix_report =~ /^[ET1]/i; 30 my $drop_dot_notype = $ENV{'DECC$READDIR_DROPDOTNOTYPE'} || ''; 31 $drop_dot = $drop_dot_notype =~ /^[ET1]/i; 32 } 33 $unix_mode = 1 if $drop_dot && unix_rpt; 34} 35 36# $wanted_filename should be 0 for readdir() and glob() tests. 37# This is because it is the only valid filename that is false in a boolean test. 38 39# $filename = '0'; 40# print "hi\n" if $filename; # doesn't print 41 42# In the case of VMS, '0' isn't always the filename that you get. 43# Which makes those particular tests pointless. 44 45$wanted_filename = $unix_mode ? '0' : '0.'; 46$saved_filename = './0'; 47 48cmp_ok($warns,'==',0,'no warns at start'); 49 50ok(open(FILE,">$saved_filename"),'created work file'); 51print FILE "0\n"; 52print FILE "1\n"; 53close(FILE); 54 55open(FILE,"<$saved_filename"); 56ok(defined(FILE),'opened work file'); 57my $seen = 0; 58my $dummy; 59while (my $name = <FILE>) 60 { 61 chomp($name); 62 $seen++ if $name eq '0'; 63 } 64cmp_ok($seen,'==',1,'seen in while()'); 65 66seek(FILE,0,0); 67$seen = 0; 68my $line = ''; 69do 70 { 71 chomp($line); 72 $seen++ if $line eq '0'; 73 } while ($line = <FILE>); 74cmp_ok($seen,'==',1,'seen in do/while'); 75 76seek(FILE,0,0); 77$seen = 0; 78while (($seen ? $dummy : $name) = <FILE> ) 79 { 80 chomp($name); 81 $seen++ if $name eq '0'; 82 } 83cmp_ok($seen,'==',2,'seen in while() ternary'); 84 85seek(FILE,0,0); 86$seen = 0; 87my %where; 88while ($where{$seen} = <FILE>) 89 { 90 chomp($where{$seen}); 91 $seen++ if $where{$seen} eq '0'; 92 } 93cmp_ok($seen,'==',1,'seen in hash while()'); 94close FILE; 95 96opendir(DIR,'.'); 97ok(defined(DIR),'opened current directory'); 98$seen = 0; 99while (my $name = readdir(DIR)) 100 { 101 $seen++ if $name eq $wanted_filename; 102 } 103cmp_ok($seen,'==',1,'saw work file once'); 104 105rewinddir(DIR); 106$seen = 0; 107$dummy = ''; 108while (($seen ? $dummy : $name) = readdir(DIR)) 109 { 110 $seen++ if $name eq $wanted_filename; 111 } 112cmp_ok($seen,'>',0,'saw file in while() ternary'); 113 114rewinddir(DIR); 115$seen = 0; 116while ($where{$seen} = readdir(DIR)) 117 { 118 $seen++ if $where{$seen} eq $wanted_filename; 119 } 120cmp_ok($seen,'==',1,'saw file in hash while()'); 121 122rewinddir(DIR); 123$seen = 0; 124$_ = 'not 0'; 125while (readdir(DIR)) 126 { 127 $seen++ if $_ eq $wanted_filename; 128 } 129cmp_ok($seen,'==',1,'saw file in bare while(readdir){...}'); 130 131rewinddir(DIR); 132$seen = 0; 133$_ = 'not 0'; 134 135$_ eq $wanted_filename && $seen++ while readdir(DIR); 136cmp_ok($seen,'==',1,'saw file in bare "... while readdir"'); 137 138rewinddir(DIR); 139$seen = 0; 140$_ = ""; # suppress uninit warning 141do 142 { 143 $seen++ if $_ eq $wanted_filename; 144 } while (readdir(DIR)); 145cmp_ok($seen,'==',1,'saw file in bare do{...}while(readdir)'); 146 147$seen = 0; 148while (my $name = glob('*')) 149 { 150 $seen++ if $name eq $wanted_filename; 151 } 152cmp_ok($seen,'==',1,'saw file in glob while()'); 153 154$seen = 0; 155$dummy = ''; 156while (($seen ? $dummy : $name) = glob('*')) 157 { 158 $seen++ if $name eq $wanted_filename; 159 } 160cmp_ok($seen,'>',0,'saw file in glob hash while() ternary'); 161 162$seen = 0; 163while ($where{$seen} = glob('*')) 164 { 165 $seen++ if $where{$seen} eq $wanted_filename; 166 } 167cmp_ok($seen,'==',1,'seen in glob hash while()'); 168 169unlink($saved_filename); 170ok(!(-f $saved_filename),'work file unlinked'); 171 172my %hash = (0 => 1, 1 => 2); 173my @array = 1; 174my $neg_sum= 0; 175 176$seen = 0; 177 178while (my $name = each %hash) 179 { 180 $neg_sum = $name - $neg_sum; 181 $seen++ if $name eq '0'; 182 } 183cmp_ok(abs($neg_sum),'==',1,'abs(neg_sum) should equal 1'); 184cmp_ok($seen,'==',1,'seen in each'); 185 186$seen = 0; 187$dummy = ''; 188while (($seen ? $dummy : $name) = each %hash) 189 { 190 $seen++ if $name eq '0'; 191 } 192cmp_ok($seen,'==',$neg_sum < 0 ? 1 : 2,'seen in each ternary'); 193 194$seen = 0; 195while ($where{$seen} = each %hash) 196 { 197 $seen++ if $where{$seen} eq '0'; 198 } 199cmp_ok($seen,'==',1,'seen in each hash'); 200 201$seen = 0; 202undef $_; 203while (each %hash) 204 { 205 $seen++ if $_ eq '0'; 206 } 207cmp_ok($seen,'==',1,'0 seen in $_ in while(each %hash)'); 208 209$seen = 0; 210undef $_; 211while (each @array) 212 { 213 $seen++ if $_ eq '0'; 214 } 215cmp_ok($seen,'==',1,'0 seen in $_ in while(each @array)'); 216 217$seen = 0; 218undef $_; 219$_ eq '0' and $seen++ while each %hash; 220cmp_ok($seen,'==',1,'0 seen in $_ in while(each %hash) as stm mod'); 221 222$seen = 0; 223undef $_; 224$_ eq '0' and $seen++ while each @array; 225cmp_ok($seen,'==',1,'0 seen in $_ in while(each @array) as stm mod'); 226 227cmp_ok($warns,'==',0,'no warns at finish'); 228