Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Using # inside qw()

by Chady (Priest)
on Jul 07, 2001 at 11:22 UTC ( [id://94698]=perlquestion: print w/replies, xml ) Need Help??

Chady has asked for the wisdom of the Perl Monks concerning the following question:

just seems that I'm braindead today. Why does this piece of code break?

#!perl -w use strict; my @c = q' # % ( / 3 6 7 @ B C G Q R ^ s t ~ '; print $c[2]; # breaks into : # Use of uninitialized value in print at test.pl line 6.

I even tried to join the array with this:

print join ('|', @c); # results in: # % ( / 3 6 7 @ B C G Q R ^ s t ~

where am I going wrong? I guess there is something special about the characters?

The qw() operator works as far as joining the array, but breaks with -w and gives this warning.

Possible attempt to put comments in qw() list at test.pl line 4.

He who asks will be a fool for five minutes, but he who doesn't ask will remain a fool for life.

Chady | http://chady.net/

Edit by tye to change title

Replies are listed 'Best First'.
Re: Problem with Quoting
by tadman (Prior) on Jul 07, 2001 at 12:08 UTC
    Your use of q instead of qw is probably the issue. You are assigning a single string to @c, and then trying to extract the third value (index 2) which isn't defined.
    my @c = qw' # % ( / 3 6 7 @ B C G Q R ^ s t ~ ';
    It's one of those "off-by-one" letter errors.

    Update: LD2 helped point out that this will generate a warning "Possible attempt to put comments in qw() list" when run with '-w' and 'strict', although it does print '(' as being $c[2]. I'm upgrading to 5.6.1 from 5.6.0 on the test system right now just to make sure there's no additional problems.
    Update2: No additional problems in 5.6.1. It runs with the same '-w' warning about comments.
Re: Problem with Quoting
by Zaxo (Archbishop) on Jul 07, 2001 at 20:46 UTC

    You can get rid of the warning with:

    my @c = split " ", q{ # % ( / 3 6 7 @ B C G Q R ^ s t ~ };

    This warning about a legal construct in qw seems to me like a bug in Perl. It's bad enough when gcc is helpful like that, but Perl warnings often go into some log file each time the script is run.

    After Compline,
    Zaxo

(tye)Re: Problem with Quoting
by tye (Sage) on Jul 08, 2001 at 06:13 UTC

    I'd probably write that as: my @c= split //, q'#%(/367@BCGQR^st~'; but you could also use: my @c= ( '#', qw' % ( / 3 6 7 @ B C G Q R ^ s t ~ ' );

    Note that perlop.pod documents this right there under qw:

    A common mistake is to try to separate the words with comma or to put comments into a multi-line C<qw>-string. For this reason, the use warnings pragma and the -w switch (that is, the $^W variable) produces warnings if the STRING contains the "," or the "#" character.
    so "don't do that". /:

            - tye (but my friends call me "Tye")
Re: Using # inside qw()
by wind (Priest) on Aug 16, 2014 at 08:04 UTC
    You can turn the warnings off for your usage of qw
    use strict; use warnings; my @c = do { no warnings 'qw'; qw' # % ( / 3 6 7 @ B C G Q R ^ s t ~ ' }; print $c[2];
    - Miller
      Hah, these days I dd()umper everything, no warnings either :)
      my @c = ( "#", "%", "(", "/", 3, 6, 7, "\@", "B", "C", "G", "Q", "R", "^", "s", "t", "~", );
      naturally I perltidy also

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://94698]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (5)
As of 2024-03-29 07:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found