我在BorderContainer中有一个dgrid,启用了"liveSplitters"(使用Dojo 1.8).dgrid很好地出现了,但是当我在左列和"前导"列(dgrid在其中)之间移动拆分器时,dgrid没有正确调整大小.但是,如果我调整窗口大小,那么dgrid会重新调整到适当的大小(即填充BorderContainer的"前导"窗格的100%).
我在CSS中将dgrid设置为100%宽度.有什么方法我需要告诉dgrid在拆分器移动后刷新它的大小?
当 Perl 解释我的代码时,我经常出现以下几个警告:
Smartmatch is experimental at /home/user/www/cgi-bin/safari/lib/SAFARI/Data.pm line 395.
Run Code Online (Sandbox Code Playgroud)
以及我重写包含错误的 CPAN 模块的子例程的几个地方:
Subroutine Net::Amazon::S3::Client::Object::put_part redefined at /usr/local/share/perl5/FaithTree/Backup.pm line 65.
Run Code Online (Sandbox Code Playgroud)
这两点都是代码中有意为之的。我发现 Smartmatch 是一个很棒的工具,我有意使用它,没有出现任何问题,并且我特别重写了这些子例程,因为它们在上游模块中无法正常运行。有没有一种“正确”的方法来告诉 Perl 不要显示此类警告?如果仍然需要它们,是否有适当的方法至少可以控制它们,这样它就不会淹没服务器日志?
我阅读了另一个可以用来隐藏 Smartmatch 警告的问题。use experimental qw(smartmatch switch);但我不太确定如何处理重新定义警告。
我正在尝试使用 Perl 查找给定 URL 的网站图标(和变体)(我想避免使用外部服务,例如 Google 的网站图标查找器)。有一个 CPAN 模块,WWW::Favicon,但它已经有十多年没有更新了——在这十年中,现在重要的变体(例如“apple-touch-icon”)已经取代了古老的“ico”文件。
我以为我在 WWW::Mechanize 中找到了解决方案,因为它可以列出给定 URL 中的所有链接,包括<link>标题标签。但是,我似乎找不到一种干净的方法来使用“find_link”方法来搜索rel属性。
例如,我尝试使用“rel”作为搜索词,希望尽管文档中没有提到它,但它可能在那里,但它不起作用。此代码返回有关无效“链接查找参数”的错误。
my $results = $mech->find_link( 'rel' => "apple-touch-icon" );
use Data::Dumper;
say STDERR Dumper $results;
Run Code Online (Sandbox Code Playgroud)
我还尝试使用其他链接查找参数,但它们似乎都不适合搜索 rel 属性。
我能弄清楚如何做到这一点的唯一方法是遍历所有链接并寻找像这样的 rel 属性:
my $results = $mech->find_all_links( );
foreach my $result (@{ $results }) {
my $attrs = $result->attrs();
#'tag' => "apple-touch-icon"
foreach my $attr (sort keys %{ $attrs }) {
if ($attrs->{'rel'} =~ /^apple-touch-icon.*$/) {
say STDERR "I found it:" . $result->url();
} …Run Code Online (Sandbox Code Playgroud) 在我的代码库中,我有几个变量“存在于”main命名空间中,我使用的各种模块可以期望总是在 main 中找到(例如,$main::author是对用户散列的引用,$main::dbh是打开的数据库句柄,$main::loader是核心实用程序类的对象,并$main::FORM具有已处理的QUERY_STRING)。例如当程序启动时:
$main::author = &getAuthor;
$main::loader = SAFARI::Loader->new;
use SAFARI::View;
my $view = SAFARI::View->new;
$view->output;
Run Code Online (Sandbox Code Playgroud)
然后当我进入时SAFARI::View::output,我可以调用这些核心变量,例如:
# Display user name:
$output .= 'Hello, ' . $main::author->{'fullName'} . '! Welcome!';
Run Code Online (Sandbox Code Playgroud)
问题:当代码在线程环境中运行时,一个线程可能需要不同的$loader对象或$author与另一个线程不同的登录。更紧迫的是,当然,每个线程都有一个不同的数据库句柄。
我知道我可以在创建对象时传递核心信息,例如View通过添加它需要的参数。但这意味着目前只能引用main命名空间中这些项目的每种类型的对象都必须有一个冗长的参数列表。我试图想出最有效和“安全”的方法来解决这个问题。
我已经考虑创建散列引用具有每个线程内它的所有不同的位,例如$common,其具有$common->{'FORM'},$common->{'loader'},$common->{'author'},等等,然后通过那些作为单个参数到每个对象:
my $common = #Logic to set up this combination of bits for this particular thread.
my $view …Run Code Online (Sandbox Code Playgroud) 我正在尝试将use代码中的某些语句切换到require仅在满足某些条件时才使用的模块(例如,在需要这些模块的两次之间程序可能会加载 1,000 次),以降低开销并提高执行速度我的程序(我一直在使用 Devel::NYTProf 来分析我的代码,即使我没有在某个会话中使用它们,一些模块也会增加大量的执行时间)。
我遇到了一个问题,脚本在加载时终止,因为符号未定义(在导入该模块之前不会定义符号)。有没有办法告诉 Perl 符号将在运行时导入?一个简单的例子:如果我调用一个触发它的例程,我只想使用 Data::Dumper:
sub dataDumper {
require Data::Dumper;
Data::Dumper->import;
say STDERR Dumper @_;
}
Run Code Online (Sandbox Code Playgroud)
但是,调用Dumper第三行会导致异常。我可以通过参考来解决这个问题Data::Dumper->Dump。然而,LWP::UserAgent 的一个类似问题证明有点贴纸,因为 LWP::UserAgent 导入 HTTP::Request。我还没有想出my $request = new HTTP::Request GET => $params->{'url'};避免抛出异常的变体。
假设我可以这样做,有什么理由说明这种方法是个坏主意吗?通过在编译时不加载这些模块,我是否会失去任何类型的优化?在像 LWP 这样的模块上,这似乎是一个简单的调用——我只是不怎么使用它。我对是否尝试在(例如) Text::Textile 和 Text::MultiMarkdown 之间动态切换感到有些困惑(我通常每次执行只需要一个。
我有一个Perl脚本,可以自动从各种来源下载内容.它会在一个eval块中进行下载,alarm以便在需要太长时间时尝试超时:
eval {
alarm(5);
my $res = $ua->request($req);
$status = $res->is_success;
$rawContent = $res->content;
$httpCode = $res->code;
alarm(0);
};
Run Code Online (Sandbox Code Playgroud)
这已经工作了多年,但在做了一些系统更新后,它突然停止工作.相反,它击中的第一个源超时,我得到以下错误,程序终止:
Alarm clock
Run Code Online (Sandbox Code Playgroud)
我做错了什么,以防止eval突然发出警报?
我正在使用Perl的Encode.pm模块,直接从CPAN下载(我已经更新到最新版本,2.84,它在RHEL上的Perl 5.10.1上运行).当我使用它时,它会发出有关Encode.pm的第111,115和172行的警告,如下所示:
Use of uninitialized value $name in concatenation (.) or string at /usr/lib64/perl5/Encode.pm line 186.
Run Code Online (Sandbox Code Playgroud)
这是相当令人沮丧的,因为警告似乎是关于Encode.pm中的某些内容而不是我的代码,我真的只想看到我的代码中的警告.我没有打开"-w"标志,但Encode.pm已use warnings在其内部启用.有没有办法隐藏模块的警告或以其他方式解决这种情况,而无需分叉Encode.pm?
我知道静音警告在某些方面可能是一个坏主意,但Encode.pm中的绝大多数警告使我很难在我寻求调试时发现我自己的代码生成的警告.它在Web服务器日志中也是不必要的混乱.