rich.wilder has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks,

I'm slowly making my way through "Programming Perl" and today made it to the example on page 19 where I encountered the syntax:

open(GRADES, ...

So what is the entity GRADES? I understand it's a user label name where the file handle is returned from open but why isn't there a sigil prefix?

Thanks,

Richard

Replies are listed 'Best First'.
Re: Sigils & Nouns?
by Athanasius (Archbishop) on Sep 30, 2015 at 03:47 UTC

    Hello rich.wilder,

    If you’d kept reading, you’d have come to the section “Filehandles” beginning on page 21. GRADES is a bareword (a string1 not preceded by a sigil), here technically a typeglob used as a filehandle. Originally, this was the only way to name filehandles in Perl, but in modern Perl the preferred way is to use a lexical scalar variable:

    open(my $grades, ...

    See, e.g., this reference.

    Note that Perl still predefines some “special” bareword filehandles: STDIN, STDOUT, STDERR, ARGV. See perlopentut.

    1Update: I should have said, an unquoted sequence of non-whitespace characters.

    Hope that helps,

    Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

      rich.wilder welcome,

      to open a file handle the lexical form explained above is, nowadays, a must. Perl is better when you choose the right idiom. In this case the idiom is:
      open my $file_handle, '>', '/path/file.ext' or die "Open failed +: $!"; # or to be clean put parens to open args open (my $file_handle, '>', '/path/file.ext') or die "Open fail +ed: $!"
      For future reference and further reading you can visit Re: Why don't file handles have sigils? (*) where tye says that the sigil for global filehandles is * like it happens for globs.

      L*
      There are no rules, there are no thumbs..
      Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.