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

how to have / in FILEHANDLE?

by Mark_Galeck (Novice)
on May 28, 2012 at 02:38 UTC ( #972769=perlquestion: print w/replies, xml ) Need Help??
Mark_Galeck has asked for the wisdom of the Perl Monks concerning the following question:

open 'FILE', file; print <FILE>
then why does
open '/FILE', file; print </FILE>
Thank you, Mark

Replies are listed 'Best First'.
Re: how to have / in FILEHANDLE?
by toolic (Bishop) on May 28, 2012 at 02:55 UTC
Re: how to have / in FILEHANDLE?
by Anonymous Monk on May 28, 2012 at 02:54 UTC

    Because that is how <> diamond operator works, it wants a bareword if you want readline , otherwise you get glob

    But, you should never use arbitrary strings as filehandles, its just painful for the sake of being painful (a stupid idea)

Re: how to have / in FILEHANDLE?
by tobyink (Abbot) on May 28, 2012 at 06:45 UTC

    You can't have a slash in a filename for the same reason you can't have one in a sub name:

    sub hello/world { say "Hello World"; }

    Subs and non-lexical filehandles are declared using a "bareword", and barewords can't contain slashes. A better question is why in the name of all that is good and holy would you want to do this?!

    You do know that the file handle and the file name have nothing to do with each other?

    OK, I'll admit I lied earlier. It is possible to name a sub with a slash. You just need to declare it and call it using unusual syntax...

    *{'hello/world'} = sub { print shift, "\n"; }; &{'hello/world'}("Hello World!");

    And similarly it can be done with filehandles...

    open *{'hello/world'}, '>', '/home/tai/tmp/helloworld.txt'; print {*{'hello/world'}} "Hello World!\n";

    The "why in the name of all that is good and holy" question still stands though.

    Nowadays there's rarely any excuse to not be using lexical file handles. (i.e. file handles declared using the my keyword.)

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

      And similarly it can be done with filehandles...

      Like the OP shows, the globularness isn't required, just quote a string

      open '/ugly', 'foo.txt' or die $!; print readline '/ugly'; close '/ugly';

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://972769]
Approved by toolic
Front-paged by Corion
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (4)
As of 2016-10-26 03:05 GMT
Find Nodes?
    Voting Booth?
    How many different varieties (color, size, etc) of socks do you have in your sock drawer?

    Results (331 votes). Check out past polls.