Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: SQL script processor and executor

by hbm (Hermit)
on Jul 27, 2012 at 13:38 UTC ( #984030=note: print w/ replies, xml ) Need Help??


in reply to SQL script processor and executor

A few formatting comments:

I think qq and combined statements are clearer here:

if ($shpath) { #print SH "chmod 700 $shpath/shell_$ts.sh\n"; #print SH "$shpath/shell_$ts.sh\n"; #print SH "rm $shpath/shell_$ts.sh\n"; #push @cmd, "pscp -pw \"${passwd}\" \"${shell}\" ${user}\@${serv +er}:${shpath}/shell_$ts.sh\n"; #push @cmd, "plink -batch -pw \"${passwd}\" ${user}\@${server} - +m \"${sh}\" >> \"${output}\" 2>${outerr}\n"; print SH "chmod 700 $shpath/shell_$ts.sh\n", "$shpath/shell_$ts.sh\n", "rm $shpath/shell_$ts.sh\n"; push @cmd, qq[pscp -pw "${passwd}" "${shell}" ${user}\@${server} +:${shpath}/shell_$ts.sh\n], qq[plink -batch -pw "${passwd}" ${user}\@${server} -m + "${sh}" >> "${output}" 2>${outerr}\n]; } else { ...

You have many "if it begins with X, trim off X" cases that can be simplified:

#if ($sqlline =~ /^=/) { # Convert the output to record v +iew if prefixed by = # $sqlline =~ s/^=//; # trim off the = if ($sqlline =~ s/^=//) { # trim off '=' and convert recor +d view if prefixed by = $rsql = 1; }

And maybe:

#$server =~ s/\s+.*//; #$user =~ s/\s+.*//; #$passwd =~ s/\s+.*//; #$dbconn =~ s/\s+.*//; #$dbuser =~ s/\s+.*//; #$dbpasswd =~ s/\s+.*//; #$shpath =~ s/\s+.*// if $shpath; map{$_ && s/\s.*//} $server,$user,$passwd,$dbconn,$dbuser,$dbpassw +d,$shpath;


Comment on Re: SQL script processor and executor
Select or Download Code
Re^2: SQL script processor and executor
by ruzam (Curate) on Jul 27, 2012 at 15:33 UTC
    map{$_ && s/\s.*//} $server,$user,$passwd,$dbconn,$dbuser,$dbpasswd,$s +hpath;

    Map goes through the trouble of creating and returning a result for you. If you don't intend to use that result, you should probably not use map for the purpose.

    I would do this instead:

    s/\s.*// foreach ($server,$user,$passwd,$dbconn,$dbuser,$dbpasswd); $shpath =~ s/\s+.*// if $shpath;

    I'm on the fence about treating $shpath separately. There's no reason to test all the variables (according to the OP code), just the $shpath variable. So testing all the other values is wasted CPU cycles. On the other hand, CPU cycles may not be important in this situation.

      "Map goes through the trouble of creating and returning a result for you."

      That has not been true for a while now. "map in void context is no longer expensive. map is now context aware, and will not construct a list if called in void context." -- perl581delta

        I stand corrected.

        However I still wouldn't use map for this purpose.

Re^2: SQL script processor and executor
by PhilHibbs (Hermit) on Aug 01, 2012 at 18:28 UTC
    Ooh I like the map thing. And... I've been aware for some time now that I should get used to qw and qq. I've kind of ignored them because they just look a little bit odd to me.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://984030]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (10)
As of 2014-11-23 22:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (134 votes), past polls