图像文件在显示后被删除,而不是之前被删除。
我使用 Perl 的文件上传功能上传了一个文件。上传工作正常,它是预期的上传目录。在同一个脚本中,我显示文件(它是一个图像文件),并且工作正常。我想要做的是在显示文件后删除它,但是当我这样做时,我得到了一个断开的链接,并且图像(当然)从目录中删除了。尝试了睡眠功能,但无济于事。
print "<img src=\"path_to\image\">
#sleep (5);
unlink "path\to\image\";
图像文件在显示后被删除,而不是之前被删除。
我使用 Perl 的文件上传功能上传了一个文件。上传工作正常,它是预期的上传目录。在同一个脚本中,我显示文件(它是一个图像文件),并且工作正常。我想要做的是在显示文件后删除它,但是当我这样做时,我得到了一个断开的链接,并且图像(当然)从目录中删除了。尝试了睡眠功能,但无济于事。
print "<img src=\"path_to\image\">
#sleep (5);
unlink "path\to\image\";
我的 Dancer 应用程序中有这条路线:get '/newplayer/:name/:team/:season' => sub {
它被像这样调用:https://website.com/newplayer/Joe Smith/Tigers/Fall 2024
并从 url 收集数据并将其放入模板 newplayer.tt 中的表单中,以便当用户到达页面时这些信息大部分已经填写完毕。
它运行良好,但我正在寻找一种方法,即使 URL 中没有提供任何值,仍然可以找到路由,这样如果用户访问,https://website.com/newplayer
他们仍然会到达页面,尽管表单为空,而不是收到 404 错误。有人知道我该怎么做吗?
当我尝试使用古老的 CMS(Bricolage)虚拟 FTP 上传某些模板文件时,它们无法传输并给出错误“打印宽字符”。我已经处理了这个问题很久了,如果有人能帮忙侦探,我想尝试解决它。开发人员不可能修复这个废弃软件。
这似乎是 net::FTPServer 的一个错误,它十多年来一直没有更新。
似乎可能不是期望 uft8 字符?有人能从导致错误的位置看到,是否有办法通过修补此文件来解决这个问题:
以下是具体位置:
以下是其中的摘录,最后一行是引发错误的行
while ($r = $file->sysread ($buffer, 65536))
{
$self->xfer ($r) if $self->{_xferlog};
# Restart alarm clock timer.
alarm $self->{_idle_timeout};
if ($transfer_hook
= $self->transfer_hook ("r", $file, $sock, \$buffer))
{
close $sock;
$file->close;
$self->_cleanup_filters (@filter_objects);
$self->reply (426,
"File retrieval error: $transfer_hook",
"Data connection has been closed.");
return;
}
for ($n = 0; $n < $r; )
{
# $w = $sock->syswrite ($buffer, $r - $n, $n);
$w = syswrite $sock, $buffer, $r - $n, $n;
Net::FTPServer::__ANON__("Wide character in syswrite at /usr/lib64/perl5/site_perl/5.10"...) called at /usr/lib64/perl5/site_perl/5.10.1/Net/FTPServer.pm line 5448
考虑以下代码:
my @Array = ("Case Number: CV-24-987654",
"Case Title: BIG NATIONAL BANK vs. IMA N DEFAULT, ET AL.",
"Case Designation: FORECLOSURE MARSH. OF LIEN",
"Filing Date: 08/10/2024",
"Judge: WILL RULE",
"Mediator: N/A",
"Next Action: N/A",
"Last Status: INACTIVE",
"Last Status Date: 10/04/2024",
"Prayer Amount: \$115,958.65");
my $index = grep { $Array[$_] eq 'Prayer Amount:%' } 0 .. $#Array;
print "My Index Number Is: $index\n";
我只需要匹配字符串的开头来找到包含短语“Prayer Amount:”的元素位置。我尝试使用通配符 % 但它仍然返回 0。
我怎样才能改进这个代码?
我是 Perl 的新手,似乎遇到了一些我不理解且出乎意料的行为。
我正在尝试编写一个函数,尝试从存储在数组中的可能位置列表中加载配置文件。我使用循环foreach
遍历数组并检查文件是否存在,但在第一次迭代之后,即使传递给它的值是静态的单引号字符串,glob
它也会返回。为什么?undef
以下是代码:
package MyPackage;
use warnings; use strict;
our @ConfigSearchPaths = (".", "~");
our $DefaultConfigName = ".my_config_file";
sub load_user_config
{
my ( $obj, $filename ) = @_;
$filename ||= $DefaultConfigName;
CONFIG_SEARCH: foreach my $search_path (@ConfigSearchPaths)
{
my $file_path = glob( "$search_path/$filename" );
# I added this line to test if the issue was related to interpolation
# but to my surprise, this also returns 'undef' after the first iteration.
my $file_path_2 = glob( '~/.my_config_file' );
if( -r $file_path )
{
# Parse the file...
}
}
}
我的 Perl 脚本中有一个我无法理解的语法错误:
# map BLOCK LIST
map { "/$_" => 1 } qw(foo bar baz); # syntax error at .. line 1, near "} qw(foo bar baz)"
我必须像这样重写它:
map { '/' . $_ => 1 } qw(foo bar baz); # no error
另一方面,这段代码有效:
# Hash reference.
{ "/$_" => 1 };
我正在使用 Perl 5.34.0。
我有这个 perl 包:
package Mojo::Runner;
use Mojo::Base 'Mojo::EventEmitter';
use Mojo::IOLoop::Subprocess;
use Mojo::Promise;
use IPC::Run;
sub run_p {
my ($self, $command, $stdin) = @_;
my ($stdout, $stderr);
my $subprocess = Mojo::IOLoop::Subprocess->new;
return $subprocess->run_p(sub {
my ($stdin, $stdout, $stderr);
my $process = IPC::Run::run $command, \$stdin, \$stdout, \$stderr;
my $e = $?;
my $promise = Mojo::Promise->new;
return $promise->reject($stderr) if $e;
return $stdout
})
}
1
它应该在 Mojo::IOLoop::Subprocess 内部使用 IPC::Run 运行某个进程,这样我就可以按如下方式使用它:
use FindBin qw($Bin);
use lib "$Bin/./lib";
use Mojo::Runner;
use strict;
$\ = "\n"; $, = "\t";
my $r = Mojo::Runner->new;
my $subprocess = $r->run_p(["rclone", "lsl", "my_own:", sprintf "--drive-root-folder-id=%s", "some_id" ])
->then(sub {
print $_ =~ s/\n$//msr for @_
})
->catch(sub {
my $err = shift;
print "Subprocess error: $err";
});
$subprocess->ioloop->start unless $subprocess->ioloop->is_running;
现在,当我故意使其失败时,例如通过使用错误的命令语法,我会收到一个错误:
Unhandled rejected promise: 2024/10/01 17:25:57 Failed to lsl: couldn't list directory: googleapi: Error 404: File not found: ., notFound
at /Users/simone/perl5/perlbrew/perls/perl-5.36.0/lib/site_perl/5.36.0/Mojo/IOLoop/Subprocess.pm line 55.
如果IPC::Run进程返回ok,则一切正常。
为什么未处理承诺?我需要改变什么?
我已经很久没有用 Perl 编写任何代码了。现在我又开始编写代码了,在单个“.pm”文件中编写两个包时遇到了一个有趣的情况。到目前为止,我认为如果我在一个文件中定义两个包(例如 ConfigData 和 RuntimeData),我可以为每个包定义一个具有相同名称(例如 my $instance)的变量(用“my”声明),而不会发生冲突。作为示例,下面是一段最简洁的代码来说明这一点:
package Jabs::ConfigData;
use strict;
use warnings;
my $instance;
sub new {
my ($class) = @_;
unless (defined $instance) {
$instance = bless {}, $class;
}
return $instance;
}
1; # End of 'ConfigData'
package Jabs::RuntimeData;
use strict;
use warnings;
my $instance;
sub new {
my ($class) = @_;
unless (defined $instance) {
$instance = bless {}, $class;
}
return $instance;
}
1; # End of 'RuntimeData'
我调用了 perl -c test2.pm 并收到以下消息作为反馈:
"my" variable $instance masks earlier declaration in same scope at test2.pm line 27.
test2.pm syntax OK
现在我不清楚为什么范围应该相同。因为'我的 $instance 是在两个不同的包中定义的。我使用的是 Ubuntu 24.04 LTS 和 Perl5(修订版 5 版本 38 颠覆版 2)
有人能为我解释一下我的理解问题吗?
测试文件:
#!/usr/bin/perl
use utf8;
use strict;
use warnings;
my $var = 'Здравствуйте';
print $var;
我们在调试器中运行它:
$ perl -d ./test.pl
Loading DB routines from perl5db.pl version 1.55
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(./test.pl:7): my $var = 'Здравствуйте';
DB<1> p $var
Wide character in print at (eval 8)[/usr/share/perl/5.30/perl5db.pl:738] line 2.
at (eval 8)[/usr/share/perl/5.30/perl5db.pl:738] line 2.
eval 'no strict; ($@, $!, $^E, $,, $/, $\\, $^W) = @DB::saved;package main; $^D = $^D | $DB::db_stop;
print {$DB::OUT} $var;
' called at /usr/share/perl/5.30/perl5db.pl line 738
DB::eval called at /usr/share/perl/5.30/perl5db.pl line 3138
DB::DB called at ./test.pl line 9
Здравствуйте
DB<2> x $var
0 '\x{0417}\x{0434}\x{0440}\x{0430}\x{0432}\x{0441}\x{0442}\x{0432}\x{0443}\x{0439}\x{0442}\x{0435}'
p
命令后的“打印宽字符”警告?x
?这似乎对我不起作用,我不知道如何让它工作。接受我用它创建的 json 的系统不喜欢"components": null,
if ($s->{category} == ""){
$j->{components} = "Unspecified";
}
else
{
j->{components} = $s->{category};
}
谢谢