小编dal*_*sam的帖子

FCGI和PSGI之间的Perl基准

我对FCGI协议的了解是,第一次调用应用程序时,它会将其加载到内存中,运行它,将响应返回给服务器,完成响应但不会结束应用程序,它会使其在内存中运行,然后下一个请求将使用此编译的应用程序的内存副本来处理请求.

阅读关于PSGI协议,它似乎以相同的方式工作.

我的问题是,我的假设是正确的,它们对于每秒请求的应用速度是一样的.

令人困惑的问题,如果他们的工作相同,为什么我看到plackup有命令行选项来启用FCGI.

perl fastcgi psgi

2
推荐指数
1
解决办法
262
查看次数

Perl简单正则表达式大写单词由下划线分隔

考虑我有类似的字符串print_this_text_in_camel_case,我希望将第一个单词和下划线后面的每个单词大写,因此结果将是Print_This_Text_In_Camel_Case.以下测试不适用于第一个单词.

#!/usr/bin/perl

my $str = "print_this_text_in_camel_case";

$str =~ s/(_.)/uc($1)/ge;

print $str, "\n";
Run Code Online (Sandbox Code Playgroud)

regex perl

2
推荐指数
1
解决办法
758
查看次数

使用ffmpeg将MP3文件分割为多个声音长度相等的文件

如何在Windows上使用命令行工具ffmpeg将一个声音文件分割为多个声音文件而不改变声音属性,每个声音文件的长度都是固定的30秒。我从这里得到了这个手动示例:

ffmpeg -i long.mp3 -acodec copy -ss 00:00:00 -t 00:00:30 half1.mp3
ffmpeg -i long.mp3 -acodec copy -ss 00:00:30 -t 00:00:30 half2.mp3
Run Code Online (Sandbox Code Playgroud)

但是有没有办法告诉它把输入文件分割成同样的声音文件,每个文件的长度是 30 秒,最后一个文件的长度是剩余的。

audio mp3 ffmpeg

2
推荐指数
1
解决办法
1837
查看次数

Perl导入所有子类中的一些模块

Perl Moose模块自动将Strict和Warning模块导入任何子类,这来自Moose文档.

我想为我自己的模块实现这个逻辑,我想将自己的模块导入到我的应用程序基础模块的子类的每个模块.

这是一个例子:

#============================
package MyBaseClass;
use Moose; 

has config => (
    is => 'rw',
    default => sub { {
        who => 'World',
    } }
);
#============================
package MyClass;
use Moose;
extends qw(MyBaseClass);

sub greet {
my $self = shift;
    printf ("Hello %s\n", $self->config->{who});
}
#============================
package MyLib;
use Moose;
extends qw(MyBaseClass);
sub settings {
}
#============================
package main;

my $object = MyClass->new();

$object->greet();
#============================
Run Code Online (Sandbox Code Playgroud)

我希望将packge MyLib导入MyBaseClass类的每个子类.

perl

1
推荐指数
1
解决办法
102
查看次数

Perl导出到子模块

我有这个父模块MyApp.pm:

package MyApp;
use Moose;
use base 'Exporter';
our @EXPORT = qw(msg);
sub msg {
    print "Hello msg\n";
}
1;
Run Code Online (Sandbox Code Playgroud)

这个子模块MyApp2.pm继承了它:

package MyApp2;
use Moose;
extends qw(MyApp);
1;
Run Code Online (Sandbox Code Playgroud)

当在App.cgi脚本中使用时,如下所示:

#!/usr/bin/perl
use MyApp2;
msg();
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

Undefined subroutine &main::msg called at App.cgi line 3.
Run Code Online (Sandbox Code Playgroud)

因此导出的函数在子类MyApp2中不起作用,但仅当我使用"使用MyApp"而不是"使用MyApp2"时才有效.我假设导出的函数也应该可以被子模块访问,这也扩展了父类.我做错了什么.

perl moose

1
推荐指数
1
解决办法
317
查看次数

Perl修剪标量或数组的空间

这是一个非常基本的Perl问题,但我只是想确保实际的良好实践.

考虑我已经构建了一个函数来修剪字符串中的空格,我会将单个标量作为字符串或字符串数​​组传递给它,我有这个基本的工作示例:

sub trim_spaces {
    my (@out) = @_;
    for (@out) {
        s/\s+//g;
    }
    return (scalar @out >1)? @out : $out[0];
}
Run Code Online (Sandbox Code Playgroud)

这适用于以下调用:

trim_spaces("  These Spaces Are All Removed");
Run Code Online (Sandbox Code Playgroud)

@str = (" Str Number 1 ", " Str Number 2 ", " Str Number 3 ");
trim_spaces(@str);
Run Code Online (Sandbox Code Playgroud)

我想要做的和理解的是这个函数的最短版本,如下所示:

sub trim_spaces {
    s/\s+//g for (@_);
    return @_;
}
Run Code Online (Sandbox Code Playgroud)

这只有在我传递数组时才有效:

trim_spaces(@str);
Run Code Online (Sandbox Code Playgroud)

但是如果我传递一个标量字符串它不起作用:

trim_spaces("  These Spaces Are All Removed");
Run Code Online (Sandbox Code Playgroud)

我知道它应该从标量ref转换为数组,如何在短版本中完成.

试图了解Perl的最佳实践.

perl

1
推荐指数
1
解决办法
753
查看次数

Perl导出的函数不起作用

假设我有这个模块:

package MyApp;

use base 'Exporter';
our @EXPORT = qw(msg);

sub import {
    my ($class, @args) = @_;
    my ($package, $script) = caller;
    print "$package, $script\n";
}

sub msg {
    print "Hello msg\n";
}

1;
Run Code Online (Sandbox Code Playgroud)

并由此脚本App.cgi使用:

#!/usr/bin/perl
use MyApp;
msg();
Run Code Online (Sandbox Code Playgroud)

如果我运行这个App.cgi我得到这个错误:

undefined subroutine &main::msg in App.cgi at line 3
Run Code Online (Sandbox Code Playgroud)

如果我重命名或删除包MyApp.pm中的子导入它工作正常.

那么导入的问题是什么,或者在导出函数时应该如何使用它.

perl

0
推荐指数
1
解决办法
135
查看次数

Perl Moose添加实例属性而不是类属性

我需要向Moose类实例添加属性。在下面的代码中,当我创建Child类的实例并向其添加属性“ app”时,我发现在创建下一个实例时也添加了该属性。我做错了,再次需要每个创建实例的属性。

#!C:\perl\bin\perl.exe
#!/usr/bin/perl

use v5.10;
use Moose;
use Data::Dumper;

{
    package Child;

    use Moose;
    use utf8;

    sub name {
        say "My name is Richard";
    }
}

sub add_attribute {
    my ($object, $attr) = @_;

    my $meta = $object->meta;

    if (!$object->can("app")) {
        $meta->add_attribute(app => (is => 'rw', default => sub{$attr}));
        $object->app($attr);
    }
    else {
        #$object->app($attr);
        say "attr $attr already exists: object=". ref($object) . ", attr=".($object->app);
    }
}

my $child = Child->new;
$child->name;
add_attribute($child, "First");
say "Child Attr: " . $child->app; …
Run Code Online (Sandbox Code Playgroud)

perl moose

0
推荐指数
1
解决办法
623
查看次数

Perl找到在数组中出现一次的元素

给定一个元素数组,如何找到仅在该数组中出现一次的元素:

my @array = qw(18 1 18 3 18 1 1 2 3 3);
Run Code Online (Sandbox Code Playgroud)

结果应该是:2

perl

-3
推荐指数
1
解决办法
209
查看次数

标签 统计

perl ×8

moose ×2

audio ×1

fastcgi ×1

ffmpeg ×1

mp3 ×1

psgi ×1

regex ×1