Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^11: true from (-e "") on Windoze (" is an illegal filename character

by syphilis (Chancellor)
on Sep 20, 2012 at 01:58 UTC ( #994574=note: print w/replies, xml ) Need Help??


in reply to Re^10: true from (-e "") on Windoze (" is an illegal filename character
in thread true from (-e "") on Windoze

I need a function that checks if file exists

Seems to me that (on Windows) we can be assured that the specified $file exists if any one of the following three conditions returns true:
-T $file || -B $file defined -T $file defined -B $file
I was also wondering about using -f instead of -e. Are there any files on Windows that will report false for -f ? (If so, then we can't use -f as a test for existence.)

Someone really ought to file a bug report about this because the perldoc -f -X documentation does *not* match the behaviour wrt '-e'.
That documentation implies that -e '""' will return true only if a file named "" exists.
Either the behaviour ought to change to fit the documentation, or the documentation be amended to fit the behaviour.
The documentation also implies that defined -f '""' will return false (but it doesn't).
Here's what I ran as a check:
#!perl -l use warnings; print "-f:"; -f '""' ? print "Returned True (unwanted behaviour)\n" : print "Returned False (wanted behaviour)\n"; print "defined -f:"; defined -f '""' ? print "Returned True (unwanted behaviour)\n" : print "Returned False (wanted behaviour)\n"; print "-T || -B:"; (-T '""' || -B '""') ? print "Returned True (unwanted behaviour)\n" : print "Returned False (wanted behaviour)\n"; print "defined -T:"; defined -T '""' ? print "Returned True (unwanted behaviour)\n" : print "Returned False (wanted behaviour)\n"; print "defined -B:"; defined -B '""' ? print "Returned True (unwanted behaviour)\n" : print "Returned False (wanted behaviour)\n";
And here's the output I got:
-f: Returned False (wanted behaviour) defined -f: Returned True (unwanted behaviour) -T || -B: Returned False (wanted behaviour) defined -T: Returned False (wanted behaviour) defined -B: Returned False (wanted behaviour)
I don't mind filing a bug report about this, but I'll wait for comments about that first (in case I've overlooked something).

Cheers,
Rob

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://994574]
help
Chatterbox?
[Corion]: LanX: Yes, that's the main problem - you have lots (and lots) of workarounds in various places and stages of the processing, and to clean that mess up requires action across the complete codebase. And it's almost impossible to do it piece-by-piece
Corion is in a similar situation.#

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (12)
As of 2017-01-16 14:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you watch meteor showers?




    Results (150 votes). Check out past polls.