in reply to pl script in webserver

Here is a more user friendly version of the use statement tester. You can enter the modules you want to test into a textarea box, instead of having to edit the code to test a new use statement. Took way to long to put together as i kept wondering why my box label still was centered even tho i added style="vertical-align:top;". Of course i added it to the textarea td .....

#!/usr/bin/perl # # http://www.perlmonks.org/?node_id=1187481 # use strict; use warnings; use CGI; use HTML::Entities qw/encode_entities/; my $cgi = CGI->new(); print $cgi->header(); print'<head><title>Perl use statment Testing</title></head><body>'."\n +" ; my $uselist0=$cgi->param('uselist'); my $uselist=$uselist0; $uselist='CGI::Carp JSON' unless (defined $uselist); $uselist=~s/[\n\r\t\l]+/ /g; $uselist=~s/\s+/ /g; print '<h3>Testing Use Commands:'.encode_entities($uselist)."</h3>\n"; + print '<pre>'."\n"; for my $use (split(' ',$uselist)) { addin($use); } print '</pre>'."\n"; print '<form method="POST">'."\n"; print '<table><tr>'."\n"; print '<td style="vertical-align:top;">Modules to test<br>CASE MATTERS +!<br>Just like in perl</td>'."\n"; print '<td style="vertical-align:top;"> </td>'."\n"; print '<td style="vertical-align:top;"><textarea rows="10" cols="50" +name="uselist">'.$uselist0.'</textarea></td>'."\n"; print '</tr><tr>'."\n"; print '<td style="vertical-align:top;"><input type="submit" value="Tes +tIt"></td>'."\n"; print '</tr></table> </form>'."\n"; print '</body></html>'; exit; sub addin { my $mod=shift; my $pre=shift; my %inc0=%INC; if ($pre) {print '<pre>'."\n";} print encode_entities('new to %INC from adding use '.$mod.";\n"); eval 'use '.$mod.';' ; print encode_entities("\n".'eval use ERROR:'.$@."\n") if ($@); my %incnew=(); my $max=0; # this ends up as largest in %INC not largest that is new + , good nuf for my $k (keys %INC) { $max=length($k) if (length($k)>$max);} my $fmt=' %-'.$max.'s => %s'."\n"; for my $k (sort keys(%INC)) { print encode_entities(sprintf($fmt,$k,$INC{$k})) unless ($inc0{$k +}); } print "\n"; if ($pre) {print '</pre>'."\n";} }

Replies are listed 'Best First'.
Re^2: pl script in webserver
by bigup401 (Pilgrim) on Apr 08, 2017 at 21:50 UTC
    Testing Use Commands:JSON::XS JSON::PP new to %INC from adding use JSON::XS; JSON/XS.pm => /usr/local/lib64/perl5/JSON/XS.pm Types/Serialiser.pm => /usr/local/share/perl5/Types/Serialiser.pm attributes.pm => /usr/share/perl5/attributes.pm common/sense.pm => /usr/local/share/perl5/common/sense.pm new to %INC from adding use JSON::PP; B.pm => /usr/lib64/perl5/B.pm Carp/Heavy.pm => /usr/share/perl5/Carp/Heavy.pm JSON/PP.pm => /usr/local/share/perl5/JSON/PP.pm List/Util.pm => /usr/lib64/perl5/List/Util.pm Scalar/Util.pm => /usr/lib64/perl5/Scalar/Util.pm bytes.pm => /usr/share/perl5/bytes.pm

      Funny that it loads there but not with JSON, did you have a "use JSON::XS;" statment already in the program you ran the last time? It seems you have both of them.

      kcott had some good debug tips at Re: pl script in webserver. Besides those there could be an error in your input to decode; you could try this.

      eval {$respons = JSON::XS->new->decode ($res->content);} ; print 'json decode error:'.$@ ."\n" if ($@);
      Running the decode inside an eval will trap any "die", and $@ will contain the error you would have died with.

      It is quite possible the error involves html encoding of data. This may fix that.

      eval {$respons = JSON::XS->new->decode ($res->decoded_content);} ; print 'json decode error:'.$@ ."\n" if ($@);

      it is quite possible that it is both html and UTF encoding problems. This would fix that

      use Encode; eval {$respons = JSON::XS->new->decode (Encode::decode_utf8($res->deco +ded_content));}; print 'json decode error:'.$@ ."\n" if ($@);
      If your web page came with proper utf settings, the content may already be marked with the utf flag and that may introduce its own error saying you cant decode data that is already marked utf. But i have gotten response content data that did not have the proper utf settings in the html before. This example came from code playing with the wordpress api.

        i tried it. and the code was working at my workstation before taking it to production. i dont expect to have any error in it. its just hosting i think. but even the hosting techs are like what. cant do anything. i would solve it if it was hosted on my space

        use JSON::XS; use HTTP::Request::Common qw(POST); my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0 }, ); $ua->agent("MyApp/0.1") my $req = HTTP::Request->new(POST => 'https://link'); $req->content_type('application/json'); my $res = $ua->request($req); $respons = JSON::XS->new->decode ($res->content); $ju = $respons->{data}->{data}; $ke = $respons->{data}->{data}}; print "Content-type: text/html\n\n"; print <<START_HTML; #html code START_HTML

      thats wat i get

Re^2: pl script in webserver
by Anonymous Monk on Apr 10, 2017 at 17:53 UTC
    In Soviet Russia, they used to shoot people for writing code like that:
    print '<h3>Testing Use Commands:'.encode_entities($uselist)."</h3>\n"; + print '<pre>'."\n"; for my $use (split(' ',$uselist)) { addin($use); } print '</pre>'."\n"; print '<form method="POST">'."\n"; print '<table><tr>'."\n"; print '<td style="vertical-align:top;">Modules to test<br>CASE MATTERS +!<br>Just like in perl</td>'."\n"; print '<td style="vertical-align:top;"> </td>'."\n"; print '<td style="vertical-align:top;"><textarea rows="10" cols="50" +name="uselist">'.$uselist0.'</textarea></td>'."\n"; print '</tr><tr>'."\n"; print '<td style="vertical-align:top;"><input type="submit" value="Tes +tIt"></td>'."\n"; print '</tr></table> </form>'."\n"; print '</body></html>';
    Use a templating solution. At least just use one print and provide the strings as a list.