小编zdi*_*dim的帖子

使用Config :: General解析错误文件时捕获问题

我正在使用Perl 5.16.3并遇到以下问题

我有使用以下代码读取Config :: General格式文件的代码:

use Config::General qw(ParseConfig);
my $meta_file = "/foo/bar/file";
my $hash;
eval {
    $hash = {ParseConfig($meta_file)};
};

if ($@) {
    print $@;
}
Run Code Online (Sandbox Code Playgroud)

现在,当文件指向buy $ meta_file出现问题时,此代码将失败,并且堆栈跟踪类似于以下内容:

在数字eq(==)中使用未初始化的值$ n_read Config :: General :: _ openfile_for_read('Config :: General = HASH(0xff92e30)','/ foo / bar / file')Config :: General :: _ open( 'Config :: General = HASH(0xff92e30)','/ foo / bar / file')Config :: General :: _ process('Config :: General = HASH(0xff92e30)')Config :: General :: new(' Config :: General','/ foo / bar …

perl

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

使用perl创建一个简单的计算器

我需要设计一个简单的计算器在Perl只有ex1.pl叫+-*,和/功能。以下是我所拥有的。

while (@ARGV>0) {
    if ($_=~m/(\d+)\s(.)\s(\d+)/) {
        if ($2 == "+") {
            print "$1 + $3\n";
        }   
        elsif ($2 == "-") {
            print "$1 - $3\n";
        }   
        elsif ($2 == "*") {
            print "$1 * $3\n";
        }   
        elsif ($2 == "/") {
            if ($3 == 0 ) { 
                print "$1 cannot be divided by 0\n";
            }   
            else {
                print "$1 / $3\n";
            }   
        }   
        else {
            print "operator not identified\n";
        }
    } …
Run Code Online (Sandbox Code Playgroud)

unix perl

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

如何使用变量而不是文件句柄

我有一个大的数据文件dump.all.lammpstrj,我需要拆分/归类到一系列文件,如Z_1_filename,Z_2_filename,Z_3_filename等基于每个记录的坐标.

坐标以无序方式保存,因此我的程序读取每一行并确定应将此记录发送到哪个文件.

我用变量, $filehandle = "Z_$i_DUMP"

我希望打开所有可能的文件

for ( my $i = 1; $i <= 100; $i++ ) {
  $filehandle = "Z_$i_DUMP";
  open $filehandle,'>', "Z_$i_dump.all.lammpstrj.dat";
  ...
}
Run Code Online (Sandbox Code Playgroud)

但是在运行我的程序时,我收到了一条消息

不能使用字符串("Z_90_DUMP")作为符号引用,而"严格引用"在...中使用

我不想扫描每个输出文件的所有数据,因为dump.all.lammpstrj扫描需要很长时间.

有没有办法将定义的变量用作文件句柄?

perl

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

随机选择一个区域并进行多次处理

我有这样的数据

>sp|Q96A73|P33MX_HUMAN Putative monooxygenase p33MONOX OS=Homo sapiens OX=9606 GN=KIAA1191 PE=1 SV=1
RNDDDDTSVCLGTRQCSWFAGCTNRTWNSSAVPLIGLPNTQDYKWVDRNSGLTWSGNDTCLYSCQNQTKGLLYQLFRNLFCSYGLTEAHGKWRCADASITNDKGHDGHRTPTWWLTGSNLTLSVNNSGLFFLCGNGVYKGFPPKWSGRCGLGYLVPSLTRYLTLNASQITNLRSFIHKVTPHR
>sp|P13674|P4HA1_HUMAN Prolyl 4-hydroxylase subunit alpha-1 OS=Homo sapiens OX=9606 GN=P4HA1 PE=1 SV=2
VECCPNCRGTGMQIRIHQIGPGMVQQIQSVCMECQGHGERISPKDRCKSCNGRKIVREKKILEVHIDKGMKDGQKITFHGEGDQEPGLEPGDIIIVLDQKDHAVFTRRGEDLFMCMDIQLVEALCGFQKPISTLDNRTIVITSHPGQIVKHGDIKCVLNEGMPIYRRPYEKGRLIIEFKVNFPENGFLSPDKLSLLEKLLPERKEVEE
>sp|Q7Z4N8|P4HA3_HUMAN Prolyl 4-hydroxylase subunit alpha-3 OS=Homo sapiens OX=9606 GN=P4HA3 PE=1 SV=1
MTEQMTLRGTLKGHNGWVTQIATTPQFPDMILSASRDKTIIMWKLTRDETNYGIPQRALRGHSHFVSDVVISSDGQFALSGSWDGTLRLWDLTTGTTTRRFVGHTKDVLSVAFSSDNRQIVSGSRDKTIKLWNTLGVCKYTVQDESHSEWVSCVRFSPNSSNPIIVSCGWDKLVKVWNLANCKLK
>sp|P04637|P53_HUMAN Cellular tumor antigen p53 OS=Homo sapiens OX=9606 GN=TP53 PE=1 SV=4
IQVVSRCRLRHTEVLPAEEENDSLGADGTHGAGAMESAAGVLIKLFCVHTKALQDVQIRFQPQL
>sp|P10144|GRAB_HUMAN Granzyme B OS=Homo sapiens OX=9606 GN=GZMB PE=1 SV=2
MQPILLLLAFLLLPRADAGEIIGGHEAKPHSRPYMAYLMIWDQKSLKRCGGFLIRDDFVLTAAHCWGSSINVTLGAHNIKEQEPTQQFIPVKRPIPHPAYNPKNFSNDIMLLQLERKAKRTRAVQPLRLPSNKAQVKPGQTCSVAGWGQTAPLGKHSHTLQEVKMTVQEDRKCES
>sp|Q9UHX1|PUF60_HUMAN Poly(U)-binding-splicing factor PUF60 OS=Homo sapiens OX=9606 GN=PUF60 PE=1 SV=1
MGKDYYQTLGLARGASDEEIKRAYRRQALRYHPDKNKEPGAEEKFKEIAEAYDVLSDPRKREIFDRYGEEGLKGSGPSGGSGGGANGTSFSYTFHGDPHAMFAEFFGGRNPFDTFFGQRNGEEGMDIDDPFSGFPMGMGGFTNVNFGRSRSAQEPARKKQDPPVTHDLRVSLEEIYSGCTKKMKISHK
>sp|Q06416|P5F1B_HUMAN Putative POU domain, class 5, transcription factor 1B OS=Homo sapiens …
Run Code Online (Sandbox Code Playgroud)

perl awk sed

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

如何在命令行中使用 perl 替换正则表达式多行 dotall

您好,我是 Perl 的新手,我想知道如何使用它来替换多行模式下的正则表达式。如果可能的话,也制作“。” 与断线相匹配。

我正在使用以下表达式:

perl -pe 's/text.*end/textChanged/g' myFile.txt
Run Code Online (Sandbox Code Playgroud)

上面的表达式替换为单行模式。它不考虑断线。

使用: Windows Stranberry Perl

regex perl command-line

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

打开的含义(STDERR,“&gt;&STDOUT”)

我在一个示例脚本中找到了它,然后我从Google搜索并找到了以下单词,

请注意,您不能简单地将STDERR打开为Perl程序中STDOUT的副本,并避免调用Shell进行重定向。这不起作用:

open(STDERR, ">&STDOUT");
Run Code Online (Sandbox Code Playgroud)

之所以失败,是因为open()使STDERR转到open()时STDOUT所在的位置。然后,反引号使STDOUT转到字符串,但不要更改STDERR(仍将其转到旧的STDOUT)。

现在我很困惑。到底是什么意思open(STDERR, ">&STDOUT");

perl io-redirection

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

将 Perl 与 Regex 结合使用,如何删除字符串中的字符串?

所以我有几个 XML 文件,其中包含具有唯一 ID 的人,并且每个人都有自己喜欢的食物(一个人可以在多个 xml 文件中):

在某些情况下,id=300 的人可能会在标签的开头吃到食物。

<person id="299">
    <food>
       <type> Hot Dog </type>
    </food>
</person>
<person id="300">
    <food>
       <type> Burger</type>
    </food>
</person>
Run Code Online (Sandbox Code Playgroud)

或者在食物标签之前可能还有其他标签

<person id="300">
    <year>
       <birth> 1990 </birth>
       <marriage> 2020 </marriage>
    </year>
    <food>
       <type> Vegan </type>
    </food>
</person>
Run Code Online (Sandbox Code Playgroud)

我需要使用单个 Perl RegEx 函数来删除 ID 为 300 的人的食物标签,如果它在人标签的开头、中间或结尾,则独立

我知道如果是整个人标签,我可以使用类似的东西:

$fileContents =~ s/<person id=\"300\"[^<]+<\/person>//g;
Run Code Online (Sandbox Code Playgroud)

但是我必须完整地保留人员标签,我只能移除人员标签内的食物标签,但我无法移除所有食物标签,因为我需要将其留给其他 ID 的人。

请问你能帮帮我吗??我一直在为这个 D 苦苦挣扎:

regex xml perl

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

使用sqlite增加锁定超时,默认值是多少?

许多客户端在 sqlite 数据库上查询时的众所周知的问题:数据库被锁定
我想增加在 Linux 上等待锁定释放的延迟(以毫秒为单位),以消除此错误。

从 sqlite-command 中,我可以使用例如(4 秒):

sqlite> .timeout 4000
sqlite>
Run Code Online (Sandbox Code Playgroud)

我已经启动了许多进行选择/插入/删除的进程,如果我不使用 sqlite-command 设置此值,我有时会得到:

sqlite> select * from items where code like '%30';
Error: database is locked
sqlite> 
Run Code Online (Sandbox Code Playgroud)

那么 .timeout 的默认值是多少?

在 Perl 5.10 程序中,我有时也会遇到此错误,尽管默认值似乎是 30.000(所以 30 秒,未记录)。
程序在出现此错误之前实际上等待了 30 秒吗?如果是,这看起来很疯狂,即使该数据库上正在运行许多其他进程,数据库至少有一段时间是空闲的

my $dbh = DBI->connect($database,"","") or die "cannot connect $DBI::errstr";
my $to = $dbh->sqlite_busy_timeout(); # $to get the value 30000
Run Code Online (Sandbox Code Playgroud)

谢谢!

database sqlite perl

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

为什么JSON编码需要引用Perl版本字符串?

对于某些 Perl 诊断测试,我使用 JSON::MaybeXS 记录格式化为 JSON 的各种信息。

当我想记录当前的 Perl 版本(从特殊变量 $^V 获取)时,出现错误。

正如最小的演示脚本所示,除非我将 $^V 引用为“$^V”,否则会发生错误。

json_perl_version_test.pl

#!/usr/bin/env perl

use strict;
use warnings;
use v5.18;

use JSON::MaybeXS;

say "Running Perl version $^V";

my $item    = 'Wut?';

my %hash1   = (
    something   => $item,
    v_unquoted => $^V
);
eval { say say 'Hash1: ', encode_json \%hash1 };
say "Oops - JSON encode error: $@" if $@;

my %hash2   = (
    something   => $item,
    v_quoted => "$^V"
);
say 'Hash2: ', encode_json \%hash2; …
Run Code Online (Sandbox Code Playgroud)

oop perl json

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

如何生成没有尾部“/”的XML标签?

我正在尝试制作一个 XML 文档。特别是,如下

<spirit:component xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4"
                xmlns:vendorExtensions="$IREG_GEN/XMLSchema/SPIRIT"     
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
                xsi:schemaLocation="$IREG_GEN/XMLSchema/SPIRIT/VendorExtensions.xsd 
                                    http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4 
                                    http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4/index.xsd">
Run Code Online (Sandbox Code Playgroud)

所以我为此制作了一个 perl 脚本,如下所示

use strict;
use warnings;

use Spreadsheet::ParseXLSX;
use XML::LibXML;
my $doc = XML::LibXML::Document->new('1.0', 'utf-8');
my $root = $doc->createElement('spirit:component');
#$root->appendChild($doc->createComment("JJ"));
$root->setAttribute('xmlns:spirit'=> "http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4");
$root->setAttribute('xmlns:vendorExtensions'=> "\$IREG_GEN/XMLSchema/SPIRIT");
$root->setAttribute('xmlns:xsi'=> "http://www.w3.org/2001/XMLSchema-instance");
$root->setAttribute('xsi:schemaLocation'=> "http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4 
                                            http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4 
                                            http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4/index.xsd");

$doc->setDocumentElement($root);
print $doc->toString(1);
Run Code Online (Sandbox Code Playgroud)

但问题是我得到了结果

<spirit:component xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4" xmlns:vendorExtensions="$IREG_GEN/XMLSchema/SPIRIT" xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4 &#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4 &#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4/index.xsd"/>
Run Code Online (Sandbox Code Playgroud)

特别是,这里有两个问题&#9;index.xsd"/>

我可以删除换行符,然后按如下方式解决它

$root->setAttribute('xsi:schemaLocation'=> "http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4 http://www.spiritconsortium.org/XMLSchema/SPIRIT/1
.4 http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4/index.xsd");
Run Code Online (Sandbox Code Playgroud)

特别是,我怎样才能/删除index.xsd"/>?我使用了错误的功能吗?

xml perl

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

标签 统计

perl ×10

regex ×2

xml ×2

awk ×1

command-line ×1

database ×1

io-redirection ×1

json ×1

oop ×1

sed ×1

sqlite ×1

unix ×1