On Sunday, Nov 9, 2003, at 16:32 US/Pacific, Dan Anderson wrote: [..]

while ($_ = <FILE>) { if ($_ =~ m/CREATE.*TABLE/) { $_ = $'; while (not ($_ =~ m/)//)) { # match last parenthesis $_ .= <FILE>; } my $table_name = $`; $table_name = tr/ \t\n\r//d; return $table_name; } }

My Programming Perl book says not to use $' $` and $&.  Is there a
better way to do this?

well a bit of it has to do with how the Perl Regular Expression Engine works, the other part has to do with making your code a bit more readable, and maintainable. The use of the $' and $` as the "perldoc perlvar" pages will tell you imposes a considerable performance penalty.

right, a bit of clean up of the code:

        while (<FILE>) { # it will set the line to $_ by default
                # cut off everything BEFORE our 'pattern'
                if ( s/.*CREATE.*TABLE//)
                {
                        chomp;  # remove any 'newline tokens'
                        my $line = $_ ; # save off what we have
                        # read until we have come to the closing paren
                        while ( $line !~ m/\)/ ) {
                                $_ = <FILE>;
                                chomp;
                                $line .= $_;    
                        }
                        # we will either have seen that last paren, or it did not exist
                        ( my $table_name = $line ) =~ s/.*\)//;
                $table_name = tr/ \t\n\r//d;
                        return $table_name;
                
                } # found opening line
        }# end while loop

being a bit of a tight translation.

ciao
drieux

---


-- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to