`&' interpreted as argument prefix

Hi,
I'm new to rubi and at present i'm trying to write a sample code for
html extraction and store it in the database. The following is the code
for that :

doc = Hpricot(open("http://www.google.com/"))
(doc/"a").each do |link|
   if (link.attributes['class'] == 'gb1')
      href = link.inner_text.strip
        con = DBI.connect("DBI:Mysql:Sample:localhost", "arunkumar",
"123456")
        stat = con.prepare("Insert into hello values ('', ?, 'GK', 71,
'female')")
        stat.execute("#{href}")
        stat.finish
        con.commit
        puts "Records have been inserted"
    else
        puts "Sorry! No matches found."
    end
end

When i execute it all works well except a warning saying :
/usr/lib/ruby/gems/1.8/gems/hpricot-0.6.164/lib/hpricot/builder.rb:26:
warning: `&' interpreted as argument prefix

I dont know where went wrong for such a warning to get displayed. Please
help.

Regards
Arun Kumar

···

--
Posted via http://www.ruby-forum.com/.

that's from hpricot and won't change anytime soon :confused:

you may want to switch to mechanize instead. Kill two birds with one stone.

···

On Mar 15, 2009, at 21:14 , Arun Kumar wrote:

Hi,
I'm new to rubi and at present i'm trying to write a sample code for
html extraction and store it in the database. The following is the code
for that :

doc = Hpricot(open("http://www.google.com/"\))
(doc/"a").each do |link|
  if (link.attributes['class'] == 'gb1')
     href = link.inner_text.strip
       con = DBI.connect("DBI:Mysql:Sample:localhost", "arunkumar",
"123456")
       stat = con.prepare("Insert into hello values ('', ?, 'GK', 71,
'female')")
       stat.execute("#{href}")
       stat.finish
       con.commit
       puts "Records have been inserted"
   else
       puts "Sorry! No matches found."
   end
end

When i execute it all works well except a warning saying :
/usr/lib/ruby/gems/1.8/gems/hpricot-0.6.164/lib/hpricot/builder.rb:26:
warning: `&' interpreted as argument prefix

Arun Kumar wrote:

Hi,
I'm new to rubi and at present i'm trying to write a sample code for
html extraction and store it in the database. The following is the code
for that :

doc = Hpricot(open("http://www.google.com/"\))

The offending line is:

       ele.instance_variable_set("@#{k}", v)

Apparently Google pages contain very complex HTML, to relieve strain on their servers. Then, Hpricot does not "sanitize" its input. That k variable might contain a &, which Ruby then warns about. instance_variable_set() creates an instance variable, like this:

    @foo = v

where 'foo' was in k. But if k contains '&foo', you get this:

    @&foo = v

You can't write that in raw Ruby, so instance_variable_set() is warning you that you should not write it in "meta-programming" Ruby either.

But none of this is your fault: It's a bug in Hpricot, which Google's advanced HTML uncovered.

The conclusion: Switch to Nokogiri. It has an Hpricot compatibility mode, but its internal engine is libxml, which is one of the industry's leading XML (and therefor HTML) implementations.

···

--
   Phlip

Well, I don't think so.

The offending line is:
ele.instance_eval &blk

If you modify it to
ele.instance_eval(&blk)
The warning is gone.

Regards,

Park Heesob

···

2009/3/16 Phlip <phlip2005@gmail.com>:

Arun Kumar wrote:

Hi,
I'm new to rubi and at present i'm trying to write a sample code for
html extraction and store it in the database. The following is the code
for that :

doc = Hpricot(open("http://www.google.com/&quot;\))

The offending line is:

 ele\.instance\_variable\_set\(&quot;@\#\{k\}&quot;, v\)

Ryan Davis wrote:

> warning: `&' interpreted as argument prefix

you may want to switch to mechanize instead. Kill two birds with one
stone.

Why two? Getting rid of this bug is one bird. Where's the second?

···

--
Posted via http://www.ruby-forum.com/\.

yup yup...

···

On Mar 16, 2009, at 01:16 , Heesob Park wrote:

Well, I don't think so.

The offending line is:
ele.instance_eval &blk

If you modify it to
ele.instance_eval(&blk)
The warning is gone.

Looks fixed if you get Hpricot version 0.6.211 or later.

http://github.com/why/hpricot/commit/
aa2b51651bee9b3770bc2ecb8f1886b47aee8584

···

On Mon, 16 Mar 2009 03:16:57 -0500, Heesob Park wrote:

2009/3/16 Phlip <phlip2005@gmail.com>:

Arun Kumar wrote:

Hi,
I'm new to rubi and at present i'm trying to write a sample code for
html extraction and store it in the database. The following is the
code for that :

doc = Hpricot(open("http://www.google.com/&quot;\))

The offending line is:

 ele\.instance\_variable\_set\(&quot;@\#\{k\}&quot;, v\)

Well, I don't think so.

The offending line is:
ele.instance_eval &blk

If you modify it to
ele.instance_eval(&blk)
The warning is gone.

Regards,

Park Heesob

--
Chanoch (Ken) Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu/~kbloom1/

I've said it before and I'll say it again: It isn't fixed until it is released.

···

On Mar 16, 2009, at 08:37 , Ken Bloom wrote:

Looks fixed if you get Hpricot version 0.6.211 or later.

http://github.com/why/hpricot/commit/
aa2b51651bee9b3770bc2ecb8f1886b47aee8584

OK. Somehow I thought that assigning a version number meant it was a
release.

···

On Mon, 16 Mar 2009 14:12:17 -0500, Ryan Davis wrote:

On Mar 16, 2009, at 08:37 , Ken Bloom wrote:

Looks fixed if you get Hpricot version 0.6.211 or later.

http://github.com/why/hpricot/commit/
aa2b51651bee9b3770bc2ecb8f1886b47aee8584

I've said it before and I'll say it again: It isn't fixed until it is
released.

--
Chanoch (Ken) Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu/~kbloom1/

Today it was actually released, and an 0.7 gem is now on RubyForge.

--Ken

···

On Mon, 16 Mar 2009 19:42:00 -0500, Ken Bloom wrote:

On Mon, 16 Mar 2009 14:12:17 -0500, Ryan Davis wrote:

On Mar 16, 2009, at 08:37 , Ken Bloom wrote:

Looks fixed if you get Hpricot version 0.6.211 or later.

http://github.com/why/hpricot/commit/
aa2b51651bee9b3770bc2ecb8f1886b47aee8584

I've said it before and I'll say it again: It isn't fixed until it is
released.

OK. Somehow I thought that assigning a version number meant it was a
release.

--
Chanoch (Ken) Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu/~kbloom1/