我使用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输出而没有所有无用空白的方法吗?
谢谢
我有一个脚本,它使用ssh密钥连接到特定用户的远程服务器.但是,如果用户信息被更改且密钥未更新,则脚本将挂起等待密码.
如何在提示输入密码时捕获此信息并抛出DIE?
例如,如果我使用:
system("ssh -C USER@someserver.com -i /.ssh/USER.key ...");
Run Code Online (Sandbox Code Playgroud)
和USER在USER.key中不是同一个USER,它挂起等待密码.我宁愿让它死.
在不使用perl模块的情况下处理此问题的最佳方法是什么?
我有一个庞大的Perl脚本(超过1500行)需要大约8个小时才能运行.
它从HTML生成SQL,然后导入到网站中.基本上它将整个论坛逆向工程化为一个新的论坛(我已获得许可).
该脚本在每次解析未经过多年改变的HTML时从头开始运行,然后将其作为哈希数组存储在内存中,直到所有HTML都被解析,生成SQL.
我希望将上次结果预先加载到内存中然后只处理更改,但是如何才能完成?
那里:我是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的新手,我正在编写一个脚本来从数据库中获取一些行:
my @rows = $conn->fetchrow_array(1,2,3);
Run Code Online (Sandbox Code Playgroud)
结果将是三行单列.
12345
56789
12376
Run Code Online (Sandbox Code Playgroud)
我应该如何将他们加在一起呢 12345,56789,56789
我试过了,
my $list = join ",", @rows.
Run Code Online (Sandbox Code Playgroud)
结果: ARRAY(0x14f6de0),ARRAY(0x1508a90),ARRAY(0x15014c0)
通过foreach循环只需用新行打印结果:
12345
56789
12376
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么 ?我有fetchrow_array错误的概念吗?
我有一个吐出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,我希望找到数组中定义的最后一个元素.
到目前为止,我有以下内容:
#generating array
$array[100] = (undef);
$array[$columns[1]-1] = $columns [2];
#finding the last element that is defined
for ($i=100; $i>=0; $i--) {
if (($array[$i] != undef) && (!defined($lastdef)) ){
$lastdef=$i;
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定为什么这不起作用.有什么建议要改进,使用Perl?
我打算打开一个文本文件并读取行.并在其前面添加带有行号的字母"pp".
文本文件如下.
39828513 39829926 1413 hsa-mir-6719 41252946 41254434 1488 hsa-mir-6889 62331112 62332604 1492 hsa-mir-4758
我希望输出如下:
pp1 39828513 39829926 1413 hsa-mir-6719 pp2 41252946 41254434 1488 hsa-mir-6889 pp3 62331112 62332604 1492 hsa-mir-4758
我写了一段代码,但我感觉不到它的工作正常.
use strict;
use warnings;
open (fh, " < file.txt") || die ;
while ($line=<fh>)
{
chomp ($line);
for (my $i=1; $i <= ($#line); $i++)
{
print "pp$i\t$line";
}
}
Run Code Online (Sandbox Code Playgroud) 这是我的代码的基本前提:
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");,代码工作.注释出来,代码不起作用.
所以基本上我想将我写入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)?如果我不清楚我的问题,我很抱歉,只要问你需要什么.
谢谢.
perl ×8
c ×2
arrays ×1
dbi ×1
defined ×1
eof ×1
escaping ×1
fgets ×1
file-io ×1
for-loop ×1
jquery ×1
openmp ×1
performance ×1
printf ×1
ssh ×1
stdin ×1
while-loop ×1
whitespace ×1
xml ×1
xml-simple ×1