小编sco*_*ozy的帖子

与Inline :: Python的不安全依赖

Inline::Python-T模式下运行时,什么可以解释这个编译时错误消息?

在/usr/local/lib/perl/5.14.2/Inline/Python.pm第193行中使用-T开关运行时打开时的不安全依赖性.

第193行是Inline::Python打开的地方$o->{API}{location},我将其视为"内联目录".

当然,我使用了所需的选项:

use constant _INLINE_DIR_ => '/var/myapp/inline';
use Inline Config => UNTAINT         => 1,
                     NO_UNTAINT_WARN => 1,
                     DIRECTORY       => _INLINE_DIR_;
Run Code Online (Sandbox Code Playgroud)

我确保其中的/var/myapp/inline所有内容都是可由每个人编写的,显然包括root和用户setuid在运行时编写的应用程序.

同样的脚本在我的计算机上运行没有问题,无论我是否以root身份启动它,运行Inline0.50 Inline::Python0.43,但是当我尝试在使用相同版本Inline::Python且版本为0.49或0.55的服务器上运行它时,会给我这个错误Inline.

perl taint

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

为什么在Perl中没有低优先级的//?

我想这个问题可能会引起一些不太重要的问题,但我一直想知道为什么在Perl中没有低优先级的定义或运算符.我想有一个理由,因为perlop明确地提到了这个事实.

我认为它有用的一个例子就是这样一个子例程:

sub input_many_data {
    my $x = <> // return;
    do_some_processing_with($x);
    my $y = <> // return;
    do_some_processing_with($y);
    return ( $x, $y );
}

while (1) {
    my ( $x, $y ) = &input_many_data or last;
    do_something_with( $x, $y );
}
Run Code Online (Sandbox Code Playgroud)

它确实可以使用$x = (<> // return),但目的会更加明显,并且代码更具可读性且不易出错,具有类似的功能($x = <>) dor return.

perl operators operator-precedence

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

CHECK和INIT块怎么了?

我对Perl模块有一个循环依赖问题:说包X使用Y并想持有对Y实例的静态引用,而包Y使用X并想持有对X实例的静态引用。

简而言之,在未首先加载的模块中our $x_instance = new X将为“无法找到对象方法”提供“新”

我想像

our $x_instance;
INIT { $x_instance = new X }
Run Code Online (Sandbox Code Playgroud)

很有道理,所以我阅读了有关特殊命名块的所有内容。

好吧,这在我做的简单测试中有效,但在我的实际应用中,它系统地显示了运行INIT块为时已晚。情况与此相同CHECK的块。

我发现的唯一解释是来自Perl Monks,恐怕我对此没有多大意义。

有人对Perl如何执行CHECKINIT超出其内容的块有一个解释perlmod,并且可以帮助我理解为什么我的块有时执行而有时不执行的原因吗?

顺便说一句,我只想了解这一点,因为我有一个合理的解决方法,我并不是很想解决我原来的循环依赖问题:

our $x_instance;
sub get_x_instance {
    $x_instance //= new X;
    return $x_instance;
}
Run Code Online (Sandbox Code Playgroud)

perl circular-dependency include

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

为什么使用Europarl对摩西有如此糟糕的表现?

我已经开始和摩西一起玩,并试图制作我认为相当标准的基线系统.我基本上遵循了网站上描述的步骤,但不是使用news-commentary我使用Europarl v7进行培训,使用WMT 2006开发套件和原始的Europarl常用测试.我的想法是做一些类似于Le Nagard&Koehn(2010)的事情,他们在基线英语到法语系统中获得了.68的BLEU分数.

总而言之,我的工作流程或多或少是这样的:

  1. tokenizer.perl 关于一切
  2. lowercase.perl(而不是truecase)
  3. clean-corpus-n.perl
  4. 仅使用Europarl v7的法国数据训练IRSTLM模型
  5. train-model.perl 完全如描述
  6. mert-moses.pl 使用WMT 2006开发
  7. 如上所述测试和测量性能

由此产生的BLEU得分为.26 ......这引出了两个问题:

  • 这是这种基线系统的典型BLEU分数吗?我意识到Europarl是一个非常小的语料库来训练单语言模型,尽管这是他们在摩西网站上做事的方式.
  • 对于刚开始使用SMT和/或摩西的人来说,我是否有任何典型的陷阱?或者像Le Nagard和Koehn这样的研究人员是否以与摩西网站上描述的方式不同的方式构建他们的基线系统,例如使用一些更大的,未公开的语料库来训练语言模型?

corpus machine-translation moses bleu

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

Clang++ 使链接器在模板类上失败(但它适用于 g++)

我有一个程序可以很好地与 GCC 配合使用,但是使用 Clang 编译它反而会使链接器失败。

我认为我的问题是模板类,所以我实现了这个小例子。

test.cpp

#include "Point.h"

int main()
{
    Point<int> p1;
    Point<int> p2{ 3, 6 };
}
Run Code Online (Sandbox Code Playgroud)

Point.h

#ifndef POINT_H
#define POINT_H

template<typename T>
class Point {
    T x, y;
  public:
    Point();
    Point(T, T);
};

template class Point<int>;
template class Point<float>;

#endif
Run Code Online (Sandbox Code Playgroud)

Point.cpp

#include "Point.h"

template<typename T>
Point<T>::Point()
    : x{0}, y{0}
{}

template<typename T>
Point<T>::Point(T t_x, T t_y)
    : x{t_x}, y{t_y}
{}
Run Code Online (Sandbox Code Playgroud)

当我用 构建它时g++ Point.cpp test.cpp,它可以正常工作。

但是使用 Clang,它会出现以下错误:

$ clang++ Point.cpp test.cpp …
Run Code Online (Sandbox Code Playgroud)

c++ linker-errors explicit-instantiation clang++

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

为什么perl不关心我是否在狭窄下宣布我的变量?

我今天花了太多时间调试其中一个阴险的小错误.

这或多或少是我所做的:

#!/usr/bin/perl

use 5.010;
use strict;
use warnings;

my $test = new MyTest('test');
say $test->to_string for 1..3;

package MyTest;

sub new {
    my $class = shift;
    my $parm  = shift;
    return bless \$parm, $class;
}

sub to_string {
    my $self = shift;
    my $string = 'Hello!' if 0;
    $string .= $$self;
    return $string;
}
Run Code Online (Sandbox Code Playgroud)

请注意,由于错误测试,my $string不进行评估.(当然,我失去这么多时间的代码没有if 0!)

我意识到编译器不知道测试将是错误的,但是它不应该抱怨我使用的变量可能没有在下一行声明?

此外,我希望这会导致运行时错误,但perl只是给了我

test
testtest
testtesttest
Run Code Online (Sandbox Code Playgroud)

为什么没有错误?这是一个错误还是一个功能?

perl scope

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

找到自然主键有什么好处

我的问题或多或少与问题相反:为什么人们在使用序列作为代理时似乎更容易找到关系中的自然主键.

BradC回答相关问题时提到,选择主键的标准是唯一性,不可简化性,简单性,稳定性和熟悉度.在我看来,使用序列牺牲了最后一个标准,以便为前四个提供最佳解决方案.

如果我认为这些标准是正确的,我可以将我的问题重新表述为:在哪种情况下,人们会认为通过寻找一种同样熟悉的独特,不可简化,简单和稳定的密钥来使一个人的生活复杂化是有利的?

database database-design primary-key

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

在Perl中分配多个数组子例程参数不起作用

我对这个例子中的perl子例程参数感到困惑

当我在子程序参数中使用引用时,它可以工作:

@a = ( 1, 2 );
@b = ( 5, 8 );
@c = add_vecpair( \@a, \@b );
print "@c\n";
print $a[0];

sub add_vecpair {    # assumes both vectors the same length
    my ( $x, $y ) = @_;    # copy in the array references
    my @result;
    @$x[0] = 2;

    for ( my $i = 0; $i < @$x; $i++ ) {
        $result[$i] = $x->[$i] + $y->[$i];
    }

    return @result;
}
Run Code Online (Sandbox Code Playgroud)

但是当我不使用引用作为这样的参数时:

@a = ( 1, 2 ); …
Run Code Online (Sandbox Code Playgroud)

perl

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

如何在Catalyst上使用DBIx助手?

我想用一个DBIx ResultSet的帮手,也就是DBIx::Class::Helper::ResultSet::Random,在我催化剂的应用.

包文档显示了它是如何从DBIx::Class::ResultSet类中加载的,但据我所知,我没有这些,因为我正在使用它DBIx::Class::Schema::Loader来创建模式.

我试过把它__PACKAGE__->load_components('Helper::ResultSet::Random')放在我的Schema::Result,但是没有用:无法通过包"DBIx :: Class :: ResultSet"找到对象方法"rand".

应该怎么做?

perl catalyst dbix-class

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