在bash中我可以做这样的事情,name如果UserName没有设置,设置为默认值:
name=${UserName:-James}
Run Code Online (Sandbox Code Playgroud)
Powershell是否支持这样的事情?
我已经多次看到以下一段代码将哈希加入另一个哈希
%hash1 = ('one' => "uno");
%hash2 = ('two' => "dos", 'three' => "tres");
@hash1{keys %hash2} = values %hash2;
Run Code Online (Sandbox Code Playgroud)
我认为每次调用"values"或"keys"函数时,它们的输出顺序都是随机的.如果这是真的,那么上面的语句如何以正确的顺序获取双方的键和值?
换句话说,为什么在合并两个哈希值后,%hash1中没有机会得到'two'=>'tres'?Perl是否足够聪明,知道如果在同一行上调用"keys"和"values",那么键和值必须以相同的顺序给出?
假设我有 10,000 行需要更新。什么会更快
UPDATE DB.Servers SET Live = 1 where name = 'server1';
UPDATE DB.Servers SET Live = 1 where name = 'server2';
...
UPDATE DB.Servers SET Live = 1 where name = 'server100000';
OR
UPDATE DB.Servers SET Live = 1 where name in ('server1', 'server2'...'server10000');
Run Code Online (Sandbox Code Playgroud)
我认为第二个选项更快,但我不确定。让我担心的是,我不知道 SQL stm 是否有长度限制。在这种情况下会推荐什么?
谢谢
我正在尝试编写一个perl脚本,通过电子邮件发送我在第一个参数中提供的任何内容,但我需要电子邮件正文有多行.当我将文本传递给脚本时(使用MIME :: Lite,fyi),电子邮件正文只有一行,因为我在脚本中传递的"\n"似乎没有在电子邮件正文中转换为换行符.
这是一个例子
脚本简介内容:
my $message = $ARGV[0];
#blah blah
sendEmail $message;
Run Code Online (Sandbox Code Playgroud)
调用脚本时的命令示例
sendEmail.pl "Issue: CPU usage is high \n Time: 11:20AM \n"
Run Code Online (Sandbox Code Playgroud)
我需要的:
Issue: CPU issue
Time: 12:00AM
Run Code Online (Sandbox Code Playgroud)
我得到了什么:
Issue: CPU issue \n Time: 12:00AM \n
Run Code Online (Sandbox Code Playgroud)
即使我只想打印输出该字符串print "$message",我也得到相同的输出.
如何强制perl考虑\n传递给它的字符,以便在看到该字符时将内容移动到下一行?
Perl中的" open "函数是否自动检查文件是否被锁定并等待它被解锁?如果是这样,它等待多长时间或我如何控制这段时间?
我有5个分叉进程将数据附加到同一个文件.每个分叉进程基本上打开文件,然后将其聚集.然后它附加其数据并关闭文件处理程序以解锁文件,以便其他分叉进程可以使用它.
一切都按预期工作,但我担心如果其中一个分叉进程花费太长时间来完成其任务,open命令可能会超时.
想象一下,我有这个Perl脚本
my $name = " foo ";
my $sn = " foosu";
trim($name, \$sn);
print "name: [$name]\n";
print "sn: [$sn]\n";
exit 0;
sub trim{
my $fref_trim = sub{
my ($ref_input) = @_;
${$ref_input} =~ s/^\s+// ;
${$ref_input} =~ s/\s+$// ;
};
foreach my $input (@_){
if (ref($input) eq "SCALAR"){
$fref_trim->($input);
} else {
$fref_trim->(\$input);
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
name: [foo]
sn: [foosu]
Run Code Online (Sandbox Code Playgroud)
[ foo ]在调用后打印值时,我希望$ name为" " trim,但sub设置$name为我想要的.为什么这个工作,当它真的不应该?
我没有通过引用传递$ name而trimsub没有返回任何内容.我希望trimsub能够创建一个$name值的副本,处理副本,但是 …
这是我试图在文本文件中识别的字符串.文本文件具有我需要在每行中提取的特定字段.例如:
Field1 = This is the content for field 1
Field2 = This is the content for field 2
Field3 = This is the content for field 3, which is = to 4445
Run Code Online (Sandbox Code Playgroud)
假设我想在第一个"="符号后提取field3的内容.如何获取该内容"这是字段3的内容,即= 4445",包括第二个"="符号,但不是第一个.我正在进入正则表达式,所以我没有多少经验.这是我尝试过的:
=.*
Run Code Online (Sandbox Code Playgroud)
但这将打印出第一个"="符号及其后的所有内容.我想省略第一个=符号.
同样,在没有第一个"="符号的情况下获得"Field3"的正则表达式是什么?我知道我可以根据第一个等号分割线,但我真的需要用regexp来做.谢谢
想象一下,我有一个指向包含许多无限数组的数组的引用.例如:
my @main_array = ( [1,2,3], [3,4,5], ['a','b','c'] );
my $reference = \@main_array
Run Code Online (Sandbox Code Playgroud)
如果以后我已经完成了使用该数组中的数据并且我只引用了它,那么删除该数组并释放内存的最佳方法是什么?我通常会执行以下操作以释放数据在简单数组中使用的内存:
undef @array
Run Code Online (Sandbox Code Playgroud)
但因为我只提到它,所以我想这样做
undef @{$reference}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我不会只是删除存储在array(main_array)中的匿名数组的引用而不是匿名数组的实际内容吗?
我想我的问题可以简化为:删除引用会使Perl释放由引用引用的数组,散列或标量所使用的内存吗?
谢谢
想象一下,我的脚本有这两个子
sub with_json_mod{
use JSON::Tiny;
blah blah blah;
}
sub without_json_mod{
blah blah blah;
}
Run Code Online (Sandbox Code Playgroud)
我只想without_json_mod在JSON::Tiny没有安装时使用.
如果JSON::Tiny没有安装,我如何使Perl不失败,而是使用without_json_modsub代替?
我试着打电话给require在with_json_mod和它似乎工作,但是当我试着让它导入它不起作用encode_json子在
sub with_json_mod{
require JSON::Tiny qw/encode_json/;
blah blah blah;
}
Run Code Online (Sandbox Code Playgroud) 有没有办法在脚本的某些部分"关闭"Perl中的DBI HandleError属性,就像可以关闭RaiseError一样?
例:
my $dbh = DBI->connect("DBI:SQLite:dbname=file.db","","",{ PrintError => 0, RaiseError => 0,
HandleError => sub{ Log("ERROR: Something failed in db"); exit 1 } })
or die "Couldn't connect";
for my $table (@db_tables){
$dbh->do("delete from $table")
or do{ Log("ERROR: Delete failed"); next };
Log("Table [$table] content was deleted");
}
exit 0;
Run Code Online (Sandbox Code Playgroud)
在这里,我不希望HandleError仅仅因为无法删除其中一个表的内容而终止脚本.我想手动处理错误.
perl ×7
arguments ×1
dbi ×1
flock ×1
hash ×1
javascript ×1
memory ×1
perl-module ×1
powershell ×1
reference ×1
regex ×1
require ×1
shell ×1
sql ×1
sql-update ×1