http://qs321.pair.com?node_id=11117051


in reply to LWP::UserAgent & match

$todaysQuoteStr =~ quotemeta($todaysQuoteStr); ## I believe this escapes all characters that need to be escaped

Not quite, no. The right hand side uses quotemeta to do that but then you don't assign the result to anything. This will show the difference that an assignment makes:

#!/usr/bin/env perl use strict; use warnings; my $todaysQuoteStr = ' data-reactid="49"><span class="Trsdu(0.3s) Fw(b +) Fz(36px) Mb(-4px) D(ib)" data-reactid="50">'; $todaysQuoteStr =~ quotemeta($todaysQuoteStr); print "Bad: $todaysQuoteStr\n"; $todaysQuoteStr = quotemeta($todaysQuoteStr); print "Good: $todaysQuoteStr\n";

Replies are listed 'Best First'.
Re^2: LWP::UserAgent & match
by vskatusa (Acolyte) on May 21, 2020 at 16:26 UTC
    Thanks hippo. I did make the change but no luck in match. BTW, the $string does contain the matcheded string $todaysQuoteStr. My revised code
    use strict; use warnings; use LWP::UserAgent; use feature 'say'; my ($position,$price); my $todaysQuoteStr = 'data-reactid="49"><span class="Trsdu(0.3s) Fw(b) + Fz(36px) Mb(-4px) D(ib)" data-reactid="50">'; $todaysQuoteStr = quotemeta($todaysQuoteStr); my $url = 'https://finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch' +; my $ua = LWP::UserAgent->new(); my $req = HTTP::Request->new(GET => $url); $ua->agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537. +36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'); my $response = $ua->request($req); my $string = $response->decoded_content; #say "string = $string"; say "\t\t\t=>searching for todays quote pattern [$todaysQuoteStr]"; + $position = 0; if ($string =~ m/$todaysQuoteStr/) { my $quoteStr = substr $string, $position, 20; say "quoteStr = $quoteStr"; my @quotes = split(/<\/span>/,$quoteStr); $price = $quotes[0]; say "\t\t\t[price = $price]"; } else { say "\t\t\t pattern not found"; }
      worked - code below
      use strict; use warnings; use LWP::UserAgent; use feature 'say'; my ($price); my $todaysQuoteStr = 'data-reactid="49"><span class="Trsdu(0.3s) Fw(b) + Fz(36px) Mb(-4px) D(ib)" data-reactid="50">'; $todaysQuoteStr = quotemeta($todaysQuoteStr); my $url = 'https://finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch' +; my $ua = LWP::UserAgent->new(); my $req = HTTP::Request->new(GET => $url); $ua->agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537. +36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'); my $response = $ua->request($req); my $string = $response->decoded_content; #say "string = $string"; say "\t\t\t=>searching for todays quote pattern [$todaysQuoteStr]"; + my ($counter,$position) = (0,''); while ($string =~ m/$todaysQuoteStr/g) { $counter++; $position = pos($string); if ($counter == 1) {last;} # } if (!(defined($position))) { $position = ''; } if ($position eq '') { say "\t\t\t\t<<pattern not found!>> "; } else { my $quoteStr = substr $string, $position, 20; say "quoteStr = $quoteStr"; my $endStr = '</span>'; $endStr = quotemeta($endStr); my @quotes = split(/$endStr/,$quoteStr); $price = $quotes[0]; say "\t\t\t[price = $price]"; }