perl 相关问题

Perl是一种过程的,高级的,通用的动态编程语言,以其对正则表达式和字符串解析功能的本机支持而闻名。有关Perl的问题,请使用此标记。对于与新(但相关)语言“Perl 6”相关的内容,请使用perl6标记。对于其他语言的Perl样式正则表达式,请使用regex标记,如果它们基于PCRE库,则使用pcre标记。

Perl 正则表达式检索第一个数字

我有一个值为 Validation_File_2_3.45.2017.csv 的字符串。 如何使用正则表达式提取第一个数字(在本例中为 2)? 我尝试过表达式 ($Filedigit) = ($

回答 2 投票 0

Perl 在脚本内就地编辑(而不是一行)

所以,我习惯了 perl -i 来使用 perl,就像我使用 sed 和就地编辑一样。 perlvar 中 $^I 的文档: $^我 就地编辑扩展的当前值。使用 undef 禁用就地编辑...

回答 2 投票 0

perl 条件正则表达式检查

<project name="kernel/lk" path="bootable/bootloader/lk" revision="e48c9314142c2ae93619ccd14aba2bc975165ffd"/> <Project name="device/google/contexthub" revision="c453c8b8fb25fb8e1c59e8288331a70dbff44061" /> 我的文件中有以上两行。 我需要获取路径和修订版,如果路径在行中不可用,则必须获取名称和修订版作为输出并保存在文件中 预期输出: name="kernel/lk" , revision="e48c9314142c2ae93619ccd14aba2bc975165ffd" path="device/google/contexthub" , revision="c453c8b8fb25fb8e1c59e8288331a70dbff44061" 如果有人给我代码片段,这将非常有帮助。 使用正则表达式处理 XML 有很多陷阱。 也就是说,下面是一种快速而肮脏的方法。它使用多个零宽度前瞻断言(?=...)。第一个按照优先顺序寻找替代方案,首先命名,然后返回路径。他们使用特殊的哈希 %+ 来获取命名捕获组中的值,例如、(?<revision>...)。 我在上面提到了陷阱。例如,请注意带引号的恶作剧。 #! /usr/bin/env perl use strict; use warnings; while (<>) { if (/(?=.*\b(?<name>name\s*=\s*["'].*?["'])|(?<path>path\s*=\s*["'].*?["'])) (?=.*\b(?<revision>revision\s*=\s*["'].*?["']))/x) { if (exists $+{path} && exists $+{revision}) { print $+{path}, " , ", $+{revision}, "\n"; } elsif (exists $+{name} && exists $+{revision}) { print $+{name}, " , ", $+{revision}, "\n"; } else { chomp; warn "$_\n - must have name or path and revision\n"; } } } 正确的方法是使用解析器。 #! /usr/bin/env perl use strict; use warnings; use XML::LibXML; while (<>) { my $dom = XML::LibXML::->load_xml(string => $_); foreach my $project ($dom->findnodes('/project | /Project')) { if (exists $project->{name} && exists $project->{revision}) { print qq[name="$project->{name}" , revision="$project->{revision}"\n]; } elsif (exists $project->{path} && exists $project->{revision}) { print qq[name="$project->{path}" , revision="$project->{revision}"\n]; } else { warn "$0: $ARGV:$.: must have name or path and revision attributes\n"; } } } 将任一程序保存到namerev,然后运行它 perl namerev input-file.xml 产生下面的输出。 name="kernel/lk" , revision="e48c9314142c2ae93619ccd14aba2bc975165ffd" name="device/google/contexthub" , revision="c453c8b8fb25fb8e1c59e8288331a70dbff44061" if ($row =~ m/name="(.+?)"\spath="(.+?)"\srevision="(.+?)"/g) { 打印“$1 $3 “;test }enter code here elsif ($row =~ m/name="(.+?)"\srevision="(.+?)"/g) {test 打印“$1$2 ”; } }test

回答 2 投票 0

“未定义符号:Perl_xs_apiversion_bootcheck”

当我尝试运行名为 DISOPRED3 的生物信息包中使用的 Perl 脚本时,我收到此消息: /usr/bin/perl:符号查找错误:/software6/bioinfo/apps/mugqic_space/software/ perl/perl-5.1...

回答 2 投票 0

如何避免空数组的`scalar`返回`undef`?

相关如何在perl中返回空数组/长度为0的数组?有点,但仍然不同: 在开发一些新代码时,我有一个 UNITCHECK 来比较两个“数组”: 一个正在...

回答 1 投票 0

用单个表达式匹配多个替换模式

我从R文档中知道gsub函数可以被编程来执行同时操作,例如大写/小写替换: gsub("([a-z]*)([A-Z]*)", "\U\1\L\2", &

回答 1 投票 0

perl 中从函数返回 +{} 或 {} 与返回 ref 或 value 之间的区别

我刚刚开始在新团队、新地方工作。他们告诉我我们在 Perl 模块中返回 ref 而不是 value。我还看到了类似 return +{foo=>'bar'}; 的内容并返回 {foo=>'bar'};什么...

回答 2 投票 0

Clojure 相当于 Perl 的“解压”功能

我正在寻找与 Clojure 中 Perl 的 unpack 函数等效的函数。 下面是一些示例 Perl 代码,说明了我想要完成的任务: # 获取一个 5 字节字符串,跳过 3 个,然后获取 2 个 8 字节

回答 1 投票 0

perl 正则表达式负向前瞻替换为通配符

更新了真实且更复杂的任务: 问题是使用或不使用 _ndm 将某种模式替换为不同的结果。 输入是一个文本文件,其中包含某些行,例如: / 更新了真实且更复杂的任务: 问题是使用或不使用 _ndm 将某种模式替换为不同的结果。 输入是一个文本文件,其中包含某些行,例如: /<random path>/PAT1/<txt w/o _ndm> /<random path>/PAT1/<txt w/ _ndm> 我需要将它们更改为 /<ramdom path>/PAT1/<sub1> /<random path>/PAT1/<sub2>_ndm 我写了一个perl命令来处理它: perl -i -pe 's#PAT1/.*_ndm#<sub2>_ndm#; s#PAT1/.*(?!_ndm)#<sub1>#' <input_file> 但是,它并没有按预期工作。全部替换为 _ndm。 原帖: 我需要使用 shell 命令将任何不以 _ndm 结尾的字符串替换为另一个字符串(这是一个示例): abc def def_ndm 到 ace ace def_ndm 我尝试使用 perl 命令 perl -pe 's/.*(?!_ndm)/ace/' 但是我发现通配符不能像我预期的那样与负向前瞻一起使用。只有当我在否定模式中包含通配符时,它才能正确跳过 def_ndm ;但因为负向先行是零长度的,所以它不能再代替普通字符串。 有什么想法吗? 正如您所发现的,"PAT1/txt_ndm" =~ m#PAT1/.*(?!_ndm)# 匹配。具体来说,它匹配 PAT1/txt_ndm。请注意,PAT1/txt_ndm 后面没有 _ndm。 要仅匹配 _ndm (PAT1/txt) 之前的文本,您可以使用以下命令: PAT1/(?:(?!_ndm).)*

回答 1 投票 0

如何重新安装部分安装的 Perl 模块?

我在 Win7 上运行 Strawberry Perl,不知何故 LWP 模块从我的所有 lib 文件夹中删除了。我尝试用 cpanm 恢复它,但它说它已安装。尽管如此,LWP 文件夹...

回答 1 投票 0

cpan 不会安装 LWP 模块

我在 Win7 上运行 Strawberry perl,不知何故 LWP 模块从我的所有 lib 文件夹中删除了。我尝试用 cpanm 恢复它,但它说它已安装。尽管如此,LWP 文件夹...

回答 1 投票 0

防止 perl 打印换行符

我有这个简单的命令: 打印测试 | perl -nle '打印 lc' 哪个打印: 测试 我想: 测试 ...没有换行符。我尝试了 perl 的 printf 但它删除了所有换行符,我想...

回答 2 投票 0

难以找到畅快的上班路线

以下路线定义效果很好 子负载路线{ 我的($self) = @_; 我的 $root = $self->routes; $root->get('/')->to(controller=>'Snipgen', action=>'index...

回答 1 投票 0

使用Python同时对文件夹中的多个文件运行perl脚本

这是我目前的 Perl 脚本: #!/usr/bin/perl 使用 open qw/:std :utf8/; 使用严格; 使用警告; 如果(定义$ARGV[0]){ 我的 $filename = $ARGV[0]; 我的%计数; 打开(我的 $fh,$filename)或 di...

回答 1 投票 0

Perl 中重复继承下的常量:原型不匹配:() vs none

这种复杂类型问题的第一个借口缺乏最小的非工作示例,但代码确实太复杂而无法导出 MWE。 无论如何,我会尝试解释这个问题: 从工作开始...

回答 1 投票 0

当我在constant.pm 中使用哈希引用时,为什么 Perl 会抱怨?

我有 ActiveState 提供的为 MSWin32-x86-多线程二进制版本 638 构建的 perl v5.6.1。 我正在编写一个 Perl 脚本,其中声明了稍后用于比较的常量

回答 7 投票 0

在 /usr/local/share/perl5/IO/Socket/SSL.pm 第 598 行指定的 SSL_version 无效

当我尝试使用 Perl 脚本中的 Net::SMTP::TLS 发送电子邮件时,我得到以下信息: /usr/local/share/perl5/IO/Socket/SSL.pm 第 598 行指定的 SSL_version 无效 操作系统:Linux 你知道那是什么吗

回答 3 投票 0

Raspberry Pi 中缺少 Perl

我已经为本地应用程序安装并配置了树莓派,我需要安装其他东西。无论我尝试安装什么,都会收到以下错误: (找不到字符串终止符...

回答 4 投票 0

如何更改postgres路径以识别perl安装

在 Linux (20.04) 上安装 Postgres 后,运行时出现以下错误消息: sudo -u postgres psql 消息错误: 找不到 warnings.pm:/usr/local/lib/x86_64-linux-gnu/perl/5.3...

回答 2 投票 0

Perl sprintf 格式说明符作为输入变量

我正在尝试使用作为命令行参数提供的字符串作为 Perl 脚本中 sprintf 语句中的格式说明符,例如 myscr.pl -fmt="%.2f %.1f “在命令行上。在...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.