以下是匹配正则表达式并在数组中存储值的脚本:
sub b1 {
# print $_;
my @file = @_;
my @value;
my $find = qr/(\s+)([0-9]+)\s([A-Z])\s[0-1].[0-9]+\s->\s([A-Z])\s/;
foreach my $file(@file){
push (@value, $file=~ /$find/) ;
print "\n";
}
return @value;
}
my @array_b1 = b1(@body);
print "@array_b1 \n";
__DATA__
28 C 0.510 -> L 0.923
30 S 0.638 -> A 0.527
31 A 0.496 -> P 0.952
__OUTPUT__
28 C L 30 S A 31 A P
Run Code Online (Sandbox Code Playgroud)
在从正则表达式捕获值并将其存储为数组时,脚本将值存储在数组中的连续元素中,即上面的数组包含元素:
@array[1]=28
@array[2]=C
@array[3]=L
@array[4]=30.
Run Code Online (Sandbox Code Playgroud)
相反,我想将正则表达式捕获的值存储在同一个数组元素中.那是:
@array[1]=28CL
@array[2]=30SA
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
我只想找到在XML :: Simple中禁用排序操作的方法
例如:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
my %my_xml = (
NAME => [ 'test' ],
EMAIL => [ 'test@example.com' ],
ID => 12,
);
my $xs = XML::Simple->new;
print $xs->XMLout(\%my_xml, RootName => "datas", NoSort => 1);
__END__
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
<datas ID="12">
<EMAIL>test@example.com</EMAIL>
<NAME>test</NAME>
</datas>
Run Code Online (Sandbox Code Playgroud)
但我希望输出为:
<datas ID="12">
<NAME>test</NAME>
<EMAIL>test@example.com</EMAIL>
</datas>
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我正在尝试从 Perl 中的输入文件读取值。输入文件如下所示:
1-sampledata1 This is a sample test
and data for this continues
2-sampledata2 This is sample test 2
Data for this also is on second line
Run Code Online (Sandbox Code Playgroud)
我想读取上面的数据,以便数据进入1-sampledata1,@array1数据2-sampledata2进入@array2等等。我将有大约 50 个这样的部分。喜欢50-sampledata50。
编辑:名称不会总是 X-sampledataX。例如,我刚刚这样做了。所以名称不能循环。我想我必须手动输入它们
到目前为止,我有以下内容(有效)。但我正在寻找一种更有效的方法来做到这一点..
foreach my $line(@body){
if ($line=~ /^1-sampledata1\s/){
$line=~ s/1-ENST0000//g;
$line=~ s/\s+//g;
push (@array1, $line);
#using splitarray because i want to store data as one character each
#for ex: i wana store 'This' as T H I …Run Code Online (Sandbox Code Playgroud) 我正在使用Jquery验证.
目前,我有一个用户名,我要为此用户名验证的是:
没有空格,我添加这个方法:
$.validator.addMethod("nowhitespace", function(value, element) {
return this.optional(element) || /^\S+$/i.test(value);
}, " No white space please");
Run Code Online (Sandbox Code Playgroud)字母数字
$.validator.addMethod("alphanumeric", function(value, element) {
return this.optional(element) || /^[a-zA-Z0-9]+$/i.test(value);
}, " Alphanumeric. Only numbers and alphabet allowed");
Run Code Online (Sandbox Code Playgroud)第一个字符必须是字母,不能是数字.
我被困在最后的验证中.如何编写正则表达式来验证第一个字符必须是字母?
BTW:
没有空白似乎有问题.我试过我的脚本,1允许空格,但不允许2个空格,为什么?
在我的应用程序中,我使用XML :: Simple并使用导出的XMLin()来解析XML文件.一切顺利,直到将无效的文件路径用作XMLin()的参数.
应用程序终止,因为XML :: Simple在给出无效文件路径时使用了die()或类似的方法.
我希望我的应用程序继续运行,即使XML :: Simple遇到了错误.所以我该怎么做?
我需要检查目录中是否存在文件.文件名的格式如下:
/d1/d2/d3/abcd_12345_67890.dat
在我的程序中,我将知道文件名 abcd_
我需要if使用-e选项编写条件,并找到与给定模式匹配的文件.
我使用Params :: Validate进行验证,但是在回调部分而不是定义直接匿名函数,如果我尝试给出该匿名函数的引用,它会直接跳转到错误记录区而不在块内打印消息(在传递正确值的情况下).
use Params::Validate qw(:all);
our $attributeCallback = sub {
my $parameter = shift;
$parameter =~ m/^\w+$/i ;
};
sub getSingleValue {
eval {
my ($domainName, $attribute) = validate_pos( @_,
{
type => SCALAR,
callbacks => {
'Domain name validation failed' => &$attributeCallback
}
},
{
type => SCALAR,
callbacks => {
'Attribute name validation failed' => sub {
$_[0] =~ m/[\w.-]+$/i }
}
}
);
print "domain name is $domainName and attribute is $attribute";
1;
} …Run Code Online (Sandbox Code Playgroud) 这是我的问题,我对Perl知之甚少,而且我有这个功能需要修复.
deviceModelMenu()调用此函数时,CLI将显示以下文本:
The following models are available ================================================== 1. 2. Cisco1240 3. Catalyst3750 4. Catalyst3650 5. HP2524
第一项是空的,这是错误的,我需要修复它,显示此菜单的代码片段是:
my $features = shift;
print "=" x 50, "\n";
print "The following models are available\n";
print "=" x 50, "\n";
my $i=1;
foreach (keys %{$features->{features}[0]->{deviceModel}})
{
print "$i. $_ \n";
$i++;
}
Run Code Online (Sandbox Code Playgroud)
如果我添加以下行:
warn Dumper($features->{features}[0]->{deviceModel});
Run Code Online (Sandbox Code Playgroud)
它抛弃了这个:
$VAR1 = {
'deviceModel' => {
'' => {
'cfg' => []
},
'Cisco1240' => {
'cfg' => [
'cisco1240feature.cfg'
]
},
'Catalyst3750' => { … 寻找有关如何删除句子中的句点字符但不删除缩写句点的一些想法.例如
"The N.J. turnpike is long. Today is a beautiful day."
将改为:
"The N.J. turnpike is long Today is a beautiful day"
基本上我要做的就是浏览目录并对所有文件执行操作,在本例中为子searchForErrors.这个子工作.到目前为止我所拥有的是:
sub proccessFiles{
my $path = $ARGV[2];
opendir(DIR, $path) or die "Unable to open $path: $!";
my @files = readdir(DIR);
@files = map{$path . '/' . $_ } @files;
closedir(DIR);
for (@files){
if(-d $_){
process_files($_);
}
else{
searchForErrors;
}
}
}
proccessFiles($path);
Run Code Online (Sandbox Code Playgroud)
任何帮助/建议都会很棒.而且,我是Perl的新手,所以解释越多越好.谢谢!