开发者

Is there a way to check, if an argument is passed in single quotes?

开发者 https://www.devze.com 2023-03-11 12:26 出处:网络
Is there a (best) way to check, if $uri was passed in single quotes? #!/usr/local/bin/perl use warnings;

Is there a (best) way to check, if $uri was passed in single quotes?

#!/usr/local/bin/perl
use warnings;
use 5.012;

my $uri = shift;
# uri_check
# ...

Added this example, to make my problem more clear.

#!/usr/local/bin/perl
use warnings;
use 5.012;
use URI;
use URI::Escape;
use WWW::YouTube::Info::Simple;
use Term::Clui;

my $uri = shift;
# 开发者_开发技巧uri check here

$uri = URI->new( $uri );
my %params = $uri->query_form;
die "Malformed URL or missing parameter" if $params{v} eq '';
my $video_id = uri_escape( $params{v} );

my $yt = WWW::YouTube::Info::Simple->new( $video_id );
my $info = $yt->get_info();

my $res = $yt->get_resolution();
my @resolution;
for my $fmt ( sort { $a <=> $b }  keys %$res ) {
    push @resolution,  sprintf "%d : %s", $fmt, $res->{$fmt};

}

# with an uri-argument which is not passed in single quotes 
# the script doesn't get this far

my $fmt = choose( 'Resolution', @resolution );
$fmt = ( split /\s:\s/, $fmt )[0];
say $fmt; 


You can't; bash parses the quotes before the string is passed to the Perl interpreter.


To expand on Blagovest's answer...

perl program http://example.com/foo?bar=23&thing=42 is interpreted by the shell as:

  1. Execute perl and pass it the arguments program and http://example.com/foo?bar=23
  2. Make it run in the background (that's what & means)
  3. Interpret thing=42 as setting the environment variable thing to be 42

You should have seen an error like -bash: thing: command not found but in this case bash interpreted thing=42 as a valid instruction.

The shell handles the quoting and Perl has no knowledge of that. Perl can't issue an error message, it just sees arguments after shell processing. It never even sees the &. This is just one of those Unix things you'll have to learn to live with. The shell is a complete programming environment, for better or worse.

There are other shells which dumb things down quite a bit so you can avoid this issue, but really you're better off learning the quirks and powers of a real shell.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号