On Sep 2, 2013, at 6:23 PM, John Aten wrote: > Hello all, > > I am writing a script to rename files. The script prompts the user to enter > tokens which will comprise part of the file name. These are made of letters > and numbers separated by a dot, ie: R.3. The letters can be R, I or C, upper > or lowercase. The first number can be one through eight, and if it is a six > there can be an additional dot followed by a one or two. To make sure that I > don't make any mistakes when putting in these tokens, I have tried to write a > function to make sure that they are valid:
Use $_[0] instead of $_ or the other suggestions from Andy. > > sub validate_tokens { > if ($_ !~ /^[ric]\.[1234578]$/i) { > if ($_ !~ /^[ric]\.6(\.[1|2])?$/i) { The '[1|2]' part of this regular expression is incorrect. Characters in a character class do not need the pipe character for alternation. They are already treated as alternates. This part should be '[12]'. Your pattern will match the string 'r.6|' You can combine the two regular expressions by using alternation and non-capturing grouping (clustering): if( $_[0] !~ /^[ric]\.(?:[1-578])|(?:6(\.[12])?)$/i ) { ... For readability, use the extended form and the more modern zero-width assertions \A and \z: if( $_[0] !~ m{ \A [ric] \. (?:[1-578]) | (?:6 (\.[12])? ) \z }ix ) { ... > print "Enter valid tokens: "; > my $new_token = <STDIN>; > chomp $new_token; > validate_tokens($new_token); > } > } > return $_; > } > > > I'm calling it like this: > > print "Enter Tokens: "; > my $token = <STDIN>; > chomp $token; > my $valid_token = validate_tokens($token); > > > Too bad it doesn't work! Even if I put in valid tokens on the first shot, > there are errors: > > Use of uninitialized value $_ in pattern match (m//) at bulk.pl line 65, > <STDIN> line 3. > Use of uninitialized value $_ in pattern match (m//) at bulk.pl line 66, > <STDIN> line 3. > > Lines 65 and 66 are the ones with the two if statements, lines 2 and 3 of the > first code snippet above. Each time I run it, the <STDIN> line number in the > error message increases by one. The script goes into an infinite loop, > prompting for valid tokens, but even if valid ones are entered it continues. > What am I missing? > -- > To unsubscribe, e-mail: beginners-unsubscr...@perl.org > For additional commands, e-mail: beginners-h...@perl.org > http://learn.perl.org/ > > -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/