Often instead of using the non-greedy ? to modify .*, use a negated character class:
sub name {
my ($str) = @_;
return $str =~ m/\@([^.]+)/ ? $1 : '';
}
which makes the nature of the match clearer ("I want everything except '.'") and generally leads to fewer surprise matches.
Note too that you should always use strictures (use strict; use warnings;) and (almost) never use prototypes. Assigning parameters to explicitly named variables helps make their use clearer, the nature of the parameters and use of the sub clearer, and avoids accidentally altering the variables passed into the sub (the elements in @_ are aliases to the parameters passed in).
True laziness is hard work
|