This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make symbolic references diagnostic less cryptic
authorSmylers <Smylers@stripey.com>
Thu, 12 Apr 2012 12:30:37 +0000 (13:30 +0100)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 22 May 2012 00:51:54 +0000 (17:51 -0700)
If somebody has accidentally used a symbolic reference with strict enabled and
are looking for diagnostics then it's likely they didn't intend to use a
symbolic reference at all. A beginner may not even know what a symbolic
reference is, or even a reference.

So explain the error in terms of what the user has done, not what sort of
references are allowed. Provide a simple example of how this error can occur,
so even those who don't know about references have a chance of spotting and
fixing their mistake.

pod/perldiag.pod

index 9a8c934..3cf0188 100644 (file)
@@ -1268,8 +1268,13 @@ test the type of the reference, if need be.
 
 =item Can't use string ("%s") as %s ref while "strict refs" in use
 
-(F) Only hard references are allowed by "strict refs".  Symbolic
-references are disallowed.  See L<perlref>.
+(F) You've told Perl to dereference a string, something which C<use strict>
+blocks to prevent it happening accidentally. See
+L<perlref/"Symbolic references">. This can be triggered by an C<@> or C<$> in a
+double-quoted string immediately before interpolating a variable, for example
+in C<"user @$twitter_id">, which says to treat the contents of C<$twitter_id>
+as an array reference; use a C<\> to have a literal C<@> symbol followed by the
+contents of C<$twitter_id>: C<"user \@$twitter_id">.
 
 =item Can't use subscript on %s