Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re: Double Interpolation of a String

by nontrivial (Novice)
on Aug 21, 2001 at 06:20 UTC ( #106456=note: print w/ replies, xml ) Need Help??


in reply to Double Interpolation of a String

Brother chromatic, I am not having much success reproducing this. If I create this simple script it works. However, if I try it in an application I am working on it doesn't. After a few hours of frustration I have decided to punt. Help please? Here is a chunk of my code. I am pulling the string out of the database instead of arbitrarily setting it:

my $WhereVal = $Return->[0]->{WhereVal}; my $Temp2 = 2; warn $WhereVal; eval "\$Temp = qq/$WhereVal/"; warn $Temp;
The result is that the eval fails. The log shows:
c.AppModule=m.AppModule and m.Application=$Temp2 at (eval 43) line 19. Use of uninitialized value in concatenation (.) at (eval 43) line 20. Use of uninitialized value in warn at (eval 43) line 21.
The complete subroutine, less gratuitous debugging code:
sub VWP_RunQuery { my ($QueryRef, @Params) = @_; if ($QueryRef) { VWP_Log(5, "Running query $QueryRef..."); my $stt = "select q.FromVal, q.OrderVal, q.SelectVal, q.WhereVal " + . "from VWPQuery q, VWPQueryRef qr where q.Query=qr.Query and " . "qr.DBType = ? and qr.Query = ?"; my $Return = VWP_SQL($stt, ($Session::DBType, $QueryRef)); if (@$Return) { my $OrderVal = $Return->[0]->{OrderVal}; $stt = "select " . $Return->[0]->{SelectVal} . " from " . $Return->[0]->{FromVal}; if ($Return->[0]->{WhereVal}) { my $WhereVal; eval "\$WhereVal = qq/$Return->[0]->{WhereVal}/"; $stt = $stt . " where " . $WhereVal; } if ($OrderVal) { if (($OrderVal =~ /order by/) || ($OrderVal =~ /ORDER BY/)) { $stt = $stt . " " . $OrderVal; } else { $stt = $stt . " order by " . $OrderVal; } } return VWP_SQL($stt, @Params); } } VWP_StrMessage(1, 13, $QueryRef); }


Comment on Re: Double Interpolation of a String
Select or Download Code
Re: Re: Double Interpolation of a String
by chromatic (Archbishop) on Aug 21, 2001 at 07:47 UTC
    It's possible that $stt is empty in some of the concatenations. A couple of minor style issues might clear it up.

    Otherwise, it depends a lot on what's coming back from the database. Without seeing that, it's hard to know what the trouble is. As a side note, I personally wouldn't use this for such a thing. It's very hard to control what variables are in scope and accessible when you pull information out of a database like this.

    There's probably a better way. If you describe the situation in SoPW, you'll probably get two or three alternate ideas that aren't as fragile.

    sub VWP_RunQuery { my ($QueryRef, @Params) = @_; if ($QueryRef) { VWP_Log(5, "Running query $QueryRef..."); my $stt = "select q.FromVal, q.OrderVal, q.SelectVal, q.WhereV +al " . "from VWPQuery q, VWPQueryRef qr where q.Query=qr.Query and " +. "qr.DBType = ? and qr.Query = ?"; my $Return = VWP_SQL($stt, ($Session::DBType, $QueryRef)); if (@$Return) { my $OrderVal = $Return->[0]->{OrderVal}; $stt = "select " . $Return->[0]->{SelectVal} . " from " . $Return->[0]->{FromVal}; if ($Return->[0]->{WhereVal}) { my $WhereVal = eval "qq/$Return->[0]->{WhereVal}/"; $stt .= " where " . $WhereVal; } if ($OrderVal) { $stt .= " order by" unless $OrderVal =~ /^order by/i; $stt .= " $OrderVal"; } return VWP_SQL($stt, @Params); } } VWP_StrMessage(1, 13, $QueryRef); }

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (16)
As of 2014-08-22 19:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (163 votes), past polls