in reply to when is a string not a string?

Does this fail or die? I expect it dies....

getData{ my $passed_sql = shift; my $sql = "SELECT COUNT(*) etc blah blah"; die "I am not passing expected SQL! I got '$passed_sql'\n" unless +$passed_sql eq $sql; my ($total_cols) = $dbh->selectrow_array($sql) or die($dbh->errstr +);

cheers

tachyon

s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

Replies are listed 'Best First'.
Re: Re: when is a string not a string?
by purge (Acolyte) on May 03, 2002 at 11:05 UTC
    ooh yes your right... but this is odd, when i print out $passed_sql it appears blank (or some spaces perhaps) even though the same string prints perfectly inside a die, or print on its own!

      While I suspect there is some more pragmatic answer, you might get that kind of behaviour from passing an overloaded object to the code (f ex something that overloads stringifying and concatenation and makes a poor job at it), or some tied variable, I guess. What are you passing to this sub, anyway? (Obscure reference: It is not $2, is it?)

      Unless you are passing something you know to be strange magic, I would have another look at how this passed value behaves. Like this, perhaps:

      my $passed_sql = shift; my $sql = "SELECT COUNT(*) etc blah blah"; print STDERR "Trying[1] to print parameter alone: " print STDERR $passed_sql; print STDERR "\nTrying[2] list print: ", $passed_sql; print STDERR "\nTrying[3] interpolated: $passed_sql\n"; die if $sql ne $passed_sql; # Might as well ... my ($total_cols) = $dbh->selectrow_array($sql) or die($dbh->errstr +);

      Again, I expect the problem is easier (and might be fixed alread?), but if not, I hope this helps.

      The Sidhekin
      print "Just another Perl ${\(trickster and hacker)},"

        Thanks for all the replies to date, very helpful, I will find the person who wrote it and find out exactly how he is calling it...

        I'm completely confused as to what is going on, if I use the die statement as written by tachyon it fails, and doesn't interpolate the variable $sql, but if I just die $sql it prints perfectly. The behaviour is baffling to say the least.

        I'll resume the discussion on tueday after a nice long rest (bank holiday here in uk)

        Thanks a lot for help up to now!
        I've just returned to this problem today and, tada, it looks like it is $2 that is being passed! now why would I get this behaviour in this case?

        Thanks for all the replies, I think we are about to crack this problem!

      Sorry can't see how $passed_sql cana print OK and NOT OK????????????? segfault.

      cheers

      tachyon

      s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print