You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl中LWP::Simple的get()为何无法通过变量传递URL?

为何无法将URL字符串传入get()函数的变量中?

问题代码

#use strict; use warnings;
use LWP::Simple; 
my $hxUrl;
my $Page;

$hxUrl="https://finance.yahoo.com/quote/SPY/history?period1=1653177600&  period2=1685059200&interval=1d&filter=history&frequency=1d&includeAdjustedClose=true";

#使用变量时,页面无法读取
$Page = get($hxURL);
print "at 10: length(Page) =", length($Page), "\n";  # length($Page) = null

#直接使用字符串时,页面可正常访问
$Page = get("https://finance.yahoo.com/quote/SPY/history?period1=1653177600&  period2=1685059200&interval=1d&filter=history&frequency=1d&includeAdjustedClose=true");
print "at 14:length(Page) =", length($Page), "\n";  # length($Page) = 1399524

遇到的报错

注释掉use strict前,编译报错:

Global symbol "$hxURL" requires explicit package name (did you forget to declare "my $hxURL"?) at test.pl line 9.

注释掉use strict后,使用变量调用get()时返回空值,直接传字符串则正常获取页面内容。调整my的声明位置也无法解决问题。

问题原因

Perl是大小写敏感的编程语言,你声明的变量是$hxUrl(首字母小写的Url),但调用get()时用的是$hxURL(全大写的URL),这是两个完全独立的变量。

未开启use strict时,Perl会自动将未声明的$hxURL视为全局变量,其值为undef,传入get()自然无法获取到页面内容;开启use strict时,Perl会严格检查变量声明,所以直接报错提示$hxURL未声明。

解决方法

将变量名统一,把调用get()时的$hxURL改为$hxUrl即可。修正后的代码如下:

use strict; use warnings;
use LWP::Simple; 
my $hxUrl;
my $Page;

$hxUrl="https://finance.yahoo.com/quote/SPY/history?period1=1653177600&  period2=1685059200&interval=1d&filter=history&frequency=1d&includeAdjustedClose=true";

# 使用统一的变量名
$Page = get($hxUrl);
print "at 10: length(Page) =", length($Page), "\n";

$Page = get("https://finance.yahoo.com/quote/SPY/history?period1=1653177600&  period2=1685059200&interval=1d&filter=history&frequency=1d&includeAdjustedClose=true");
print "at 14:length(Page) =", length($Page), "\n";

这样不管是否开启use strict,都能正常将URL传入get()函数并获取页面内容。

内容的提问来源于stack exchange,提问作者user1067305

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 13:13:08