in reply to Re^3: How to pass a variable to a subroutine
in thread How to pass a variable to a subroutine

Thanks to everyone for the help and replies.

However I am not sure what the problem is but even though $FN_SPLIT and $FOUND_FILE match they do not produce the correct results. Here is the code that I am using along with the results of running it. I am not sure why even though both variables match($FN_SPLIT and $FOUDN_FILE) they do not produce a print of MATCH MATCH as seen the the third entry under results.

If I manually replace $FN_SPLIT in this line ( $FOUND_FILE =~ /($FN_SPLIT)/ ) with a file name, lets say the same one shown below then I get MATCH MATCH MATCH line to print, but again not sure why when the variable is passed it does not produce a match.

Thanks for the help in advance once again.
@FN = split(/\=/, $LINE); push(@FILE_NAME, @FN[1]); foreach my $FN_SPLIT (@FILE_NAME) { chomp $FN_SPLIT; print "This is the fn_split variabl +e: $FN_SPLIT\n\n"; find ( sub { my $FOUND_FILE = $_; chomp $FOUND_FILE; print "This is the FOUND_ +FILE variable: $FOUND_FILE\n\n"; if ( $FOUND_FILE =~ /($FN +_SPLIT)/ ) { print "============== +==================================================\n"; print "MATCH MATCH MA +TCH $FN_SPLIT : $FOUND_FILE MATCH MATCH MATCH\n"; print "============== +==================================================\n"; } else { print "$FOUND_FILE do +es not equal: $FN_SPLIT\n\n"; } }, $SEARCH_DIR ); }
Results
This is the fn_split variable: 08ptr00 This is the FOUND_FILE varible: . . does not equal: 08ptr00 This is the fn_split variable: 08r2t00 This is the FOUND_FILE varible: 08r3t00 08r3t00 does not equal: 08ptr00 This is the fn_split variable: 08ptr00 This is the FOUND_FILE varible: 08ptr00 08ptr00 does not equal: 08ptr00

Replies are listed 'Best First'.
Re^5: How to pass a variable to a subroutine
by ikegami (Patriarch) on Dec 06, 2008 at 22:43 UTC

    Five problems unrelated to your question:

    • Don't you have warnings turned on!? @FN[1] issues "Scalar value @FN[1] better written as $FN[1]".
    • Get rid of chomp $FOUND_FILE;. $FOUND_FILE contains a file name, not a filename followed by a newline.
    • $FN_SPLIT doesn't contain a regexp pattern, so /($FN_SPLIT)/ should be /(\Q$FN_SPLIT\E)/.
    • The captures in the regexp pattern are a waste of resource. /(\Q$FN_SPLIT\E)/ should be /\Q$FN_SPLIT\E/.
    • Finally, the regexp pattern doesn't check for equality. For that, you'd want $FOUND_FILE =~ /^\Q$FN_SPLIT\E\z/ or better yet $FOUND_FILE eq $FN_SPLIT.

    Try using

    use Data::Dumper; local $Data::Dumper::Useqq = 1; local $Data::Dumper::Terse = 1; print("FOUND_FILE: ", Dumper($FOUND_FILE), "\n"); print("FN_SPLIT: ", Dumper($FN_SPLIT ), "\n");

    There's probably leading or trailing spaces.

      Thanks for the reply/help. After adding the code above and printing the output after the name there is a \r is that a return? How/what is the best way to fix that? Thanks again for all the help.

      08ptr00\r

      -------------RESULTS-------------- FN_SPLIT: 08ptr00/r FOUND_FILE: : 08r3t00

        Looks like you have a DOS file on a unix system. Replacing
        chomp $FN_SPLIT;
        with
        $FN_SPLIT =~ s//\r?\n\z/;
        will handle both DOS and unix files on a unix system.