> I am assigning a variable dynamically and using it in a query to > fetch values from my database. Here is the pseudo code... > > ########### > my $string ; > my $q1 = "select * from bugs where target_milestone = ? and date > between ? and ?; > my $q2 = "select * from bugs where $string and target_milestone = ? > and date between ? and ?; > > foreach my $q ($q1,$q2){ > $stmt = $dbh->prepare($q1) or die ""; #####$dbh already has a valid > handle > $stmt->execute() or die ""; > > $string = "bug_id not in (1,2,3)"; #### 1,2,3 are eg. values which > i get after process $q1 and i #use it in $q2 > } > > ################################## > > howver it happens that $string is not used in $q2 i.e. $q2 is executed > without taking into account the newly assigned value to $string and > instead using ''; > > Is it that perl compiles the statement statement beforehand and never > really substitutes it when foreach loop advances to use $q2.
No it doesn't compile the statement. The catch is that string interpolation (the change from $varname to the value of the $varname in doublequoted strings) happens at the place you specify the doublequoted literal, not every time you used it: #!perl $x = 'original'; $string = "The x='$x'."; $x = 'modified'; print $string; If you want to change the value of the $q2 after it was assigned you have to put a mark there and replace that mark once you have the value you want to replace there. Something like my $string ; my $q1 = "select * from bugs where target_milestone = ? and date between ? and ?; my $q2 = "select * from bugs where ### and target_milestone = ? and date between ? and ?; foreach my $q_template ($q1,$q2){ (my $q = $q_template) =~ s/###/$string/g; $stmt = $dbh->prepare($q1) or die ""; #####$dbh already has a valid handle $stmt->execute() or die ""; $string = "bug_id not in (1,2,3)"; #### 1,2,3 are eg. values which i get after process $q1 # and i use it in $q2 } HTH, Jenda ===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz ===== When it comes to wine, women and song, wizards are allowed to get drunk and croon as much as they like. -- Terry Pratchett in Sourcery -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/