http://www.perlmonks.org?node_id=899799


in reply to Regular expression and lexical variables

You have ; as well as : in your data. Either fix your data or modify the regex.
#!/usr/bin/perl use v5.12.2; use warnings; use strict; while (<DATA>) { $_ =~ /(\d\d)[:;](\d\d)[:;](\d\d)/; my $hours = $1; my $minutes = $2; my $seconds = $3; print "$hours,$minutes,$seconds\n" } __DATA__ 01:23:45 06:54;32 23;45:16
update: You could introduce some error checking
#!/usr/bin/perl use v5.12.2; use warnings; use strict; while (my $line = <DATA>) { if ($line =~ /(\d\d)[:;](\d\d)[:;](\d\d)/){ my $hours = $1; my $minutes = $2; my $seconds = $3; print "$hours,$minutes,$seconds\n"; } else{ print qq{bad line: $line\n}; } } __DATA__ 01:23:45 06:54;32 23;45:16 23_45_16