On 9/2/2013 8:23 PM, John 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: sub validate_tokens { if ($_ !~ /^[ric]\.[1234578]$/i) { if ($_ !~ /^[ric]\.6(\.[1|2])?$/i) { 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?
Howdy. In your subroutine replace "$_" with "$_[0]" in 3 places. Then it may still be broke, but it will function better. Mike