On Fri, 1 Jun 2018 15:54:55 -0500 Rick T <p...@reason.net> wrote: > This is a newbie question, I’m sure. But I get perplexed easily! > > The follow code segment expects to receive a $student_id consisting of a > surname followed by a hyphen followed by a number. The die is for testing > what I’m doing. > > If I feed it 'jones-123’ it dies with ‘jones, - , 123’ as I expected. But if > I feed it ‘jones-‘ omitting the number on the end, it dies with no matches at > all (or blanks): ‘ , , ‘ and I cannot figure out why it does not die with > ‘jones, -, ' and would appreciate an explanation. Many thanks! > > $student_id = lc $student_info_hash{student_id}; # Impose lower case > $student_id =~ s/\s//xmsg; # Remove whitespace > > $student_id =~ > m{ > \A([a-z]+) # match and capture leading alphabetics > (-) # hyphen to separate surname from student number > ([0-9]+\z) # match and capture trailing digits > }xms; # Perl Best Practices > $student_surname = $1; > my $hyphen = $2; > $student_number = $3;
In addition to the other comments, Instead of that, you should do: if (my ($surname, $hyphen, $num) = $student_id =~ m{ ... }xms) { # match successful. } else { die "match failed ..."; } always check for regex match successes and use the return captures of regex ops. See PBP for more. > die "$student_surname, $hyphen, $student_number”; > > Rick Triplett > -- ----------------------------------------------------------------- Shlomi Fish http://www.shlomifish.org/ Best Introductory Programming Language - http://shlom.in/intro-lang A horse! A horse! My kingdom for a horse! — https://en.wikiquote.org/wiki/Richard_III_%28play%29 Please reply to list if it's a mailing list post - http://shlom.in/reply . -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/