From: "Kelly Jones" <[EMAIL PROTECTED]>
> Consider:
>
> perl -le '$hash{"foo-bar"} = 1; print $hash{foo-bar}'
> [no result]
>
> perl -le '$hash{"foobar"} = 1; print $hash{foobar}'
> 1
>
> I sort of understand this: in the first script, Perl treats foo-bar as
> a subtraction, and sets $hash{0} to 1. In the second one it assumes
> you just left off some quotes.
The rule for automatic quoting within $hash{...} is "if it looks like
word, it doesn't have to be quoted". And - is not in the list of word
characters as far as Perl is concerned.
> My question: since Perl doesn't have constants, what exactly IS
> foo-bar? Why is it 0?
>
> The behavior above seems inconsistent to me. Is it considered a bug?
No. It's documented behaviour.
For historical purposed, if you do not "use strict" then
$var = foo;
will be treated as
$var = 'foo';
if there is no subroutine named foo. It's called "bareword" and was a
bad idea in my opinion. In your case you are subtracting two strings,
'foo' and 'bar' which means both are evaluated to a number (zero) and
then the zeroes are subtracted.
print('foo' - 'bar');
This can cause hard to find errors (if for example you mistype a
subroutine name) so you should always start your scripts with
use strict;
which will prevent this.
Jenda
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed
to get drunk and croon as much as they like.
-- Terry Pratchett in Sourcery
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/