小编Tud*_*tin的帖子

Perl标志-pe,-pi,-p,-w,-d,-i,-t?

我已经看到了许多使用不同标志运行Perl代码或脚本的方法.但是,当我尝试google每个标志的含义时,我主要将结果发送到通用Perl网站,并且没有关于标志或其使用的具体信息.

以下是我经常遇到的旗帜,我不知道它们的含义:

  • perl -pe
  • perl -pi
  • perl -p
  • perl -w
  • perl -d
  • perl -i
  • perl -t

如果你告诉我每个人的意思和一些用例,或者至少告诉我找出其含义的方法,我将非常感激.

perl flags command-line

102
推荐指数
4
解决办法
6万
查看次数

MySQL`FORCE INDEX`用例?

几乎在任何地方,我FORCE INDEX都非常沮丧地使用它,我完全理解并知道原因 - MySQL有更大的机会知道哪些索引比(普通)开发人员更好.

但是,最近我发现了一个案例,它FORCE INDEX在几百次的范围内改进了我的执行时间:

  • JOIN 在4张桌子上
  • 第一张表有大约500 000条记录
  • INNER JOINed表中的2个有超过1百万的记录
  • 第一个表有一个名为的字段published_date,varchar以YMD格式存储(无法更改为datetime)
  • 需要published_date最多5 000条记录的范围
  • 第一个表上的一些其他GROUP BYORDER BY子句在不同的字段上,而不是published_date此查询所需的

虽然我以多种方式重写了查询,但我的执行时间不到130秒(最高超过700秒).使用FORCE INDEXpublished_date,执行时间降至5秒以下.

我花了几天时间才想起臭名昭着的FORCE INDEX选择.

问题:

  • 您找到的其他用例是什么FORCE INDEX
  • 考虑使用时,您是否有一些最佳实践FORCE INDEX

编辑 - Obsevations: 我也在这里创建了这篇博文.你提供的所有答案也会出现在那里 - 有学分和你想要的所有东西.

编辑2

I applied the suggestions I received in your comments (ANALYZE TABLE and OPTIMIZE …

mysql

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

如果您在标量上下文中评估哈希,您会得到什么?

请考虑以下代码段:

use strict;
use warnings;

my %a = ( a => 1,
          b => 2,
          c => 'cucu',
          d => undef,
          r => 1,
          br => 2,
          cr => 'cucu',
          dr => '321312321',

        );

my $c = %a;

print $c;
Run Code Online (Sandbox Code Playgroud)

结果是5/8,我不明白这代表什么.我在某个地方读到这个分数查看结果中的数字可能代表哈希中的桶数,但显然不是这种情况.

有谁知道如何在标量上下文中评估perl哈希值?

编辑

我添加了一些其他哈希打印:

use strict;
use warnings;

use 5.010;


my %a = ( a => 1,
          b => 2,
          c => 'cucu',
          d => undef,
          r => 1,
          br => 2,
          cr => 'cucu',
          dr …
Run Code Online (Sandbox Code Playgroud)

perl

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

清理庞大的Perl Codebase

我目前正在开发一个大约15年的Web应用程序.

它主要包含带有HTML :: Template模板的CGI perl脚本.

它有超过12 000个文件和大约260 MB的总代码.我估计不需要超过1500 perl脚本,我想摆脱所有未使用的代码.

实际上没有为代码编写测试.

我的问题是:

  • 您是否了解任何可以帮助我获取d和d模块列表的CPAN模块?userequire
  • 如果你想摆脱所有额外的代码,你的方法是什么?

我在考虑以下方法:

  • 尝试使用在特定位置输出加载的文件名的内容来覆盖userequireperl内置类
  • 覆盖warnings和/或strict模块import功能,并在特定位置输出文件名
  • 研究Devel::Coverperl模块并采用相同的方法并在进行手动测试而不是自动测试时分析代码
  • 用自定义的perl可执行文件替换perl可执行文件,它将记录它读取的文件的每个名称(我不知道该怎么做)
  • 一些创造性的使用lsof(?!?)

perl cgi web-applications code-cleanup

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

仅使用XML:LibXML在Perl中添加对XSLT的引用

我有一个动态创建的XML.但是,我想在其中添加对XSLT文件的引用,以便能够在Mozilla中将XML文件呈现为HTML.

我希望我的最终XML能够像这样开始:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="xslt_stylesheet_file.xsl"?>
<root_node>
</root_node>
Run Code Online (Sandbox Code Playgroud)

我无法安装XML :: LibXSLT,因此这不是一个解决方案.另一种解决方案是将XML写入文件,将其作为常规文件打开并向其添加XSLT引用 - 但这对我来说似乎不对.

这有优雅的解决方案吗?

编辑:

添加了一些代码

use strict;
use warnings;
use XML::LibXML;

my $final_xml = XML::LibXML::Document->new('1.0','utf-8');

 my $root_node = $final_xml->createElement('root'); 

 $final_xml->setDocumentElement( $root_node );


open (MYFILE, '>final.xml' );
 print MYFILE $final_xml->toString();
close (MYFILE);
Run Code Online (Sandbox Code Playgroud)

输出是:

<?xml version="1.0" encoding="utf-8"?>
<root/>
Run Code Online (Sandbox Code Playgroud)

xml perl libxml2

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

Mojolicious定制会议

我正在尝试使用Mojolicious的数据库会话,而不是使用已签名cookie的内置数据库会话.

startup子程序中我有类似的东西:

my $dbh = DBI->connect(                                                                                                                                  
                        $config->{database}->{dsn},                                                                                                      
                        $config->{database}->{user},                                                                                                     
                        $config->{database}->{password},
                      );

my $session = MojoX::Session->new(
    store     => [dbi => {dbh => $dbh}],  # use MojoX::Session::Store::Dbi
    transport => 'cookie',                # this is by default
    ip_match  => 1
);

(ref($self))->attr( 'session' => sub {                
                return $session;
                } );
Run Code Online (Sandbox Code Playgroud)

我想用session对象类似$self->session$self->app->session在控制器.

不幸的是它不起作用 - 它使用以前的会话(来自不同的浏览器).

这让我发疯了 - 我今天所做的一切都是为了让这项工作 - 我已经阅读了所有可用的文档,也是其MojoX::Session所有相关类的来源,尝试了大约923847293847239847种方法使其工作,但似乎没有做到这一点.

PS:我session在db中创建了表.

你知道我应该怎么做以便能够使用Mojolicious的DB会话吗?

perl dbi mojolicious

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

MongoDB:如何禁用日志记录警告:ClientCursor :: staticYield无法解锁b/c的递归锁定?

我收到了标题中的警告

警告:ClientCursor :: staticYield无法解锁b/c的递归锁定ns ....

在日志文件中实际上数十亿次(使用此单个日志消息,日志文件在一天内达到200 GB的大小).正如在这个SO问题中所提到的,我想采用简单地忽略该消息的"解决方案".

我做了什么(无济于事)阻止它是:

  • 设置参数 quiet = true
  • 设置参数 oplog = 0
  • 设置参数logpath=/dev/null(希望不再记录任何内容)
  • 设置参数 logappend=false

所有这些都是无用的 - 消息仍然充斥着日志文件.

我现在使用的解决方案是每晚运行一个cron作业来简单地清空该日志文件.

拜托,还有什么我可以尝试的吗?

我在Debian 6.0上使用MongoDB 2.6.2进行编程 Perl

logging debian suppress-warnings mongodb

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

相同的代码,不同机器上有关UTF8字符的不同结果

我有这个代码:

use strict;
use warnings;
use utf8;
use HTML::Entities;
use feature 'say';

binmode STDOUT, ':encoding(utf-8)';

my $t1 = "&#x010c;esk&aacute; Spo&#x0159;itelna - Q3 2014";
my $t2 =  "&#268;esk&aacute; Spo&#345;itelna - Q3 2014";

say decode_entities($t1);
say decode_entities($t2);
Run Code Online (Sandbox Code Playgroud)

在我的开发机器上执行时输出:

?eská Spo?itelna - Q3 2014
?eská Spo?itelna - Q3 2014
Run Code Online (Sandbox Code Playgroud)

当在UAT机器上执行(Aser Acceptance Test)时,输出:

Äeská SpoÅitelna - Q3 2014
Äeská SpoÅitelna - Q3 2014
Run Code Online (Sandbox Code Playgroud)

现在,在两台机器上,当我运行时,perl -v我们有这是为x86_64-linux-thread-multi-ld构建的perl 5,版本16,subversion 3(v5.16.3)

并且HTML::Entities两台机器上的版本相同:

    Installed: 3.69
    CPAN:      3.69  up to date
Run Code Online (Sandbox Code Playgroud)

我的开发机器运行CentOS release 5.8 …

perl utf-8

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

read_file'File :: Slurp' - sysopen:没有这样的文件或目录

这可能有什么问题?

我试图显示现有文件的内容:

perl -MFile::Slurp -e 'print File::Slurp->read_file("/tmp/001.jpg", { binmode => ":raw" } ) if -e "/tmp/001.jpg"; '
Run Code Online (Sandbox Code Playgroud)

我收到错误:

read_file 'File::Slurp' - sysopen: No such file or directory
Run Code Online (Sandbox Code Playgroud)

该文件存在,print仅执行获取if -e "/tmp/001.jpg"

perl readfile fileslurp

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