In general having "use warnings" on is a good idea, but at least in one case it makes code unnecessary complex. Specifically, when I would like to print out debugging messages. For examples this code:
use 5.010;
use strict;
use warnings;
my $x = 23;
my $y;
debug("x='$x' y='$y'");
debug(sprintf "x='%s' y='%s'", ($x // ''), ($y // ''));
sub debug {
say shift
}
the first call to debug() will generate a warning "Use of uninitialized value $y in concatenation..."
The second call to debug() does not generate any warning, but it seems to be too complex.
Another solution I was thinking about is probably even more complex:
use 5.010;
use strict;
use warnings;
my $x = 23;
my $y;
debug({x => $x, y => $y});
sub debug {
my ($d) = @_;
my $s = join ' ', map { sprintf("$_='%s'", ($d->{$_} // '')) } sor
+t keys %$d;
say $s;
}
Another solution might be this:
use 5.010;
use strict;
use warnings;
my $x = 23;
my $y;
debug("x='%s' y='%s'", $x, $y);
sub debug {
my ($fmt, @params) = @_;
printf "$fmt\n", map { $_ // '' } @params;
}
Do you see any problems with the suggested solutions?
Do you have any other suggestions?
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.