小编Sin*_*nür的帖子

使用Perl的Template.pm,我如何从数组中选择一个随机元素并输出它?

假设我的模板中有以下内容:

[%- pages = [ 'one', 'two', 'three' ] -%]

<p>Go to page [%- ... -%]</p>
Run Code Online (Sandbox Code Playgroud)

假设EVAL_PERL成立(即我不能使用[%- PERL -%]块),我需要什么把里面[%- ... -%]的上方,从而得到下面的输出?

<p>Go to page "a randomly picked element of pages"</p>
Run Code Online (Sandbox Code Playgroud)

perl template-toolkit

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

如何在Perl单行中获取输入文件的名称?

猫monday.csv

223.22; 1256.4 227.08
; 1244.8
228.08; 1244.7
229.13; 1255.0
227.89; 1243.2
224.77; 1277.8

cat tuesday.csv

227.02; 1266.3
227.09; 1234.9
225.18; 1244.7
224.13; 1255.3 228.59
; 1263.2
224.70; 1247.6

这个Perl单行为我提供了第二列中最高值的行,其中第一列中的前三个数字是227或226来自文件"monday.csv":

$ perl -F\; -ane '$hash{$_} = $F[1] if /22[78]/; END{ print and exit for sort{ $hash{$b} &lt;=> $hash{$a} } keys %hash }' monday.csv

这个Perl一行代表给出了第二列中最高值的行,其中第一列中前三个数字是227或226来自所有*day.csv文件:

$ perl -F\; -ane '$hash{$_} = $F[1] if /22[78]/; END{ print and exit for sort{ $hash{$b} &lt;=> $hash{$a} } keys %hash }' *day.csv

我怎么能重写这个单行来获得输出:

filename:"第一列中第一列中具有最高值的行,其中第一列中的前3位数字是227或226,来自文件'filename.csv'"

对于每个 …

perl argv command-line-arguments

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

如何从XML :: Simple :: XMLout压缩XML?

我使用XML :: Simple来解析和编辑一个非常大的XML文件,速度是必不可少的(到目前为止,我已经尝试过所有方法的XML :: Simple是最快的)

现在,一旦我的所有编辑完成,我使用XMLout()将XML打印到文档,尽管它使用适当的缩进打印它,如果这是人类读取但在我的情况下完全没用的话.

没有空格的输出文件是1.2 Mb,白色空间是15 Mb.

我一直在使用:

my $string = XMLout($data);
$string =~ s/>[\s]*</></g;
print $out $string;
Run Code Online (Sandbox Code Playgroud)

但它似乎不仅是一个极端的CPU占用并且需要大量的内存.

他们是一种简单地将我的XML对象作为正确的XML输出而没有所有无用空白的方法吗?

谢谢

xml perl whitespace xml-simple

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

在perl中提示输入密码时死亡

我有一个脚本,它使用ssh密钥连接到特定用户的远程服务器.但是,如果用户信息被更改且密钥未更新,则脚本将挂起等待密码.

如何在提示输入密码时捕获此信息并抛出DIE?

例如,如果我使用:

system("ssh -C USER@someserver.com -i /.ssh/USER.key ...");
Run Code Online (Sandbox Code Playgroud)

和USER在USER.key中不是同一个USER,它挂起等待密码.我宁愿让它死.

在不使用perl模块的情况下处理此问题的最佳方法是什么?

ssh perl

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

如何避免重新处理已在Perl脚本中处理的输入?

我有一个庞大的Perl脚本(超过1500行)需要大约8个小时才能运行.

它从HTML生成SQL,然后导入到网站中.基本上它将整个论坛逆向工程化为一个新的论坛(我已获得许可).

该脚本在每次解析未经过多年改变的HTML时从头开始运行,然后将其作为哈希数组存储在内存中,直到所有HTML都被解析,生成SQL.

我希望将上次结果预先加载到内存中然后只处理更改,但是如何才能完成?

perl performance

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

为什么在这个Perl示例中,具有转义字符的字符串的串联工作方式不同?

那里:我是Perl的新手,并且遇到了字符串连接问题.我有两个字符串:

my $string1 = "hello\U\Q \t\n\f\b\aWorld" . "\n" . "\E";
my $string2 = "hello\U\Q \t\n\f\b\aWorld\n\E";
Run Code Online (Sandbox Code Playgroud)

它们看起来和我一样,直到我打印出来. $string1看起来像这样:

hello\ \    \
\
 \WORLD
Run Code Online (Sandbox Code Playgroud)

和一个铃声.

$string2 就是这个:

hello\ \    \
\
 \WORLD\
Run Code Online (Sandbox Code Playgroud)

带有相同的铃声,尾部有反斜杠.

为什么$string2在结尾处得到反斜杠但$string1不是?

perl escaping

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

执行perl时,'$'转换为'2918 1174 2918'

我有一个吐出html页面的perl.我想使用jquery操作html页面.我已将所有jquery代码放入字符串并将该字符串放入其中

<script type='javascript'> code </script> 
Run Code Online (Sandbox Code Playgroud)

块.但是当我执行perl时,我的所有$符号都被转换为2918 1174 2918.所以如果我的代码$(".className")现在我得到了2918 1174 2918(".className")

有人可以指导我吗?我的代码如下:

 my $str = "<html><head><script type='text/javascript' src='js/top5jquery-1.6.2.min.js'>";
   $str .="<script type='text/javascript'>$('.submitButton').click(function(){ alert('clicked submit button'); });";
   $str .="</head><body><input type='submit' value='submit' />Submitting</body></html>";

my $file_name = "/mainDirectory/myfile";
my $fh;
open ($fh, "> $file_name") or die "Can not open $file_name to write";
print $fh $str;
close($fh);
Run Code Online (Sandbox Code Playgroud)

perl jquery

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

在Perl中,如何解析日期字符串并从它代表的日期中减去天数?

我在字符串中有一个日期$str1="20120704".我想从该日期减去1天,并将日期值存储为字符串$str2.我该怎么做?

perl datetime

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

为什么插入printf语句会使我的函数正常工作?

这是我的代码的基本前提:

while(norm_of_error > tol){
  #pragma omp parallel for
  for(i = 1; i <= N*N; i++){
    //printf("thread id: %d\n",omp_get_thread_num());
      :
    int val = based on i
      :
    #pragma omp critical
    x[i-1] = val;
  }
  #pragma omp barrier
  iter++;
}
Run Code Online (Sandbox Code Playgroud)

简而言之,我使用Jacobi迭代方法求解Ax = b.我的问题是,在printf()语句取消注释的情况下,norm_of_error趋向于零并且while循环结束.但是,通过简单地说出printf()声明,这不会发生.任何人都可以给我一个暗示,为什么printf()声明有任何影响?我猜这个问题与omp_get_thread_num()的调用有关,但我不明白为什么会有任何区别.

编辑:我将printf()语句更改为printf("hi\n");,代码工作.注释出来,代码不起作用.

c printf openmp

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

为什么在使用fgets时我必须输入3次EOF?

所以基本上我想将我写入stdin(包括换行符)的所有内容复制到字符串以用于哈希目的.我设法完成了这个并制作了小代码来代表我的问题.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define BUFFERSIZE 10000

int main()
{
char *myStr = calloc(1,1);
char buffer[BUFFERSIZE];

while( fgets(buffer, BUFFERSIZE , stdin) != NULL ){
  myStr = realloc(myStr, strlen(myStr)+1+strlen(buffer) );
  strcat( myStr, buffer );
}
printf("\n%s\n",myStr);

}
Run Code Online (Sandbox Code Playgroud)

当我输入一些文本然后按ENTER键并调用EOF后,一切正常.

但是当我启动程序时输入"a"然后我尝试调用EOF(使用Ctrl Z+ (Windows cmd提示符),Ctrl D(Linux))我必须执行三次程序才能实际打破循环.我期待最多2次.

有人可以解释如何使用EOF,stdin和fgets工作吗?或者我应该使用其他东西(例如getline)?如果我不清楚我的问题,我很抱歉,只要问你需要什么.

谢谢.

c stdin fgets while-loop eof

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