>From 'perldoc perldata':

  Variable substitution inside strings is limited to scalar
  variables, arrays, and array or hash slices.  (In other
  words, names beginning with $ or @, followed by an optional
  bracketed expression as a subscript.)

You can check this from the command line:

  % perl -le 'print "$s -- @s -- %s"'
  --  -- %s

So the '%' isn't the issue here.  The issue is certainly the (mis)use of
join(), as was pointed out by a previous poster.


> -----Original Message-----
> From: Jeremiah Gowdy [mailto:[EMAIL PROTECTED] 
> Sent: Monday, July 25, 2005 9:14 AM
> To: Siegfried Heintze; mysql@lists.mysql.com
> Subject: Re: How to use Like Clause in Perl? Works fine in 
> MySQL control center!
> 
> When you use double quotes for strings in Perl, Perl looks 
> through your 
> strings for variables like $foo, and replaces them with the 
> current value of 
> $foo.  This is called interpolation.  When you use single quotes, it 
> considers your string a literal.
> 
> So when you use double quotes, you need to escape any special 
> characters 
> like $ % " or @.  When you use single quotes, the only 
> character you have to 
> worry about is '.  Here are ways you could make this string work.
> 
> Double quotes with special characters escaped (due to interpolation)
> 
> "SELECT 'David!' LIKE '\%D\%v\%'"
> 
> Single quotes with double quote usage for the SQL quoting (no 
> escaping 
> required)
> 
> 'SELECT "David!" LIKE "%D%v%"'
> 
> Single quotes with single quotes escaped for the SQL quoting
> 
> 'SELECT \'David!\' LIKE \'%D%v%\''
> 
> Keep in mind that interpolation is work, so using one of the 
> single quotes 
> strings which does not search your string for variables to 
> replace is going 
> to be higher performance than the double quoted version, although the 
> difference may be a little or a lot depending on how many 
> times the string 
> is interpreted (if it is in a loop or something).
> 
> 
> ----- Original Message ----- 
> From: "Siegfried Heintze" <[EMAIL PROTECTED]>
> To: <mysql@lists.mysql.com>
> Sent: Friday, July 22, 2005 4:03 PM
> Subject: How to use Like Clause in Perl? Works fine in MySQL 
> control center!
> 
> 
> > I'm having trouble getting the like clause to work. It 
> seems to work fine 
> > in
> > the MySQL Control Center 9.4.beta. I'm using MySQL 4.0.23-debug.
> >
> > use DBH;
> > my $sth = DBH->prepare("SELECT 'David!' LIKE '%D%v%'");
> > $sth->execute();
> > my $row;
> > print join(@$row,",")."\n" while ($row = $sth->fetch);
> >
> >
> > This does not print a "1" in perl. It just prints a ",".
> >
> > I've posted a query on this in [EMAIL PROTECTED] with no luck.
> >
> > Anybody have any suggestions?
> > Thanks,
> > Siegfried
> >
> > Here is DBH.pm. Below that is my original post in 
> [EMAIL PROTECTED]
> >
> >
> > package DBH;
> > use DBI;
> > require Exporter;
> > our @ISA = qw(Exporter);
> > our @EXPORT = qw(DBH); # Symbols to be exported by default
> > our @EXPORT_OK = qw(); # Symbols to exported by request
> > our $VERSION = 0.1;
> >
> >
> > our $dbh;
> > sub DBH{
> >    unless ( $dbh && $dbh->ping ) {
> >        $dbh = DBI->connect ( 
> 'dbi:mysql:dbname=hotjobs;host=SALES', 'xyz',
> > 'xyz' ) ;
> >        die DBI->errstr unless $dbh && $dbh->ping;
> >    }
> >    return $dbh;
> > }
> >
> > 1;
> > 
> --------------------------------------------------------------
> --------------
> > --------------------------------------------------------
> >
> >
> > The following code works with Activestate perl 8.4/MySQL. 
> If I comment the
> > second line, however, it does not work. No error messages 
> and no results.
> >
> > If I use the MySQL Enterprise console and type in my first SELECT 
> > statement
> > that includes the LIKE clause, it works.
> >
> > I'm stumped. There must be something strange with that "%", 
> but I cannot
> > figure it out.
> > Anyone got any suggestions?
> >
> > Siegfried
> >
> > my $sJobTitle = "SELECT sName FROM keywords ORDER BY sName 
> WHERE sName 
> > LIKE
> > '%'";
> >  $sJobTitle = q[SELECT sName FROM keywords ORDER BY sName];
> >
> >  my $sth = DBH->prepare($sJobTitle);
> >  $sth->execute();
> >  my $row;
> >  while ($row = $sth->fetch){
> >    push @sResult,"<li>".join( "", @$row)."</li>\n";
> >  }
> >
> >
> > -- 
> > MySQL General Mailing List
> > For list archives: http://lists.mysql.com/mysql
> > To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]
> >
> > 
> 
> 
> -- 
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    
> http://lists.mysql.com/[EMAIL PROTECTED]
> 
> 

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to