在全局范围和功能范围中采购文件有什么区别?
介于:
loadlib ()
{
source "$1.sh"
}
loadlib lib
Run Code Online (Sandbox Code Playgroud)
和
source lib.sh
Run Code Online (Sandbox Code Playgroud)
除了lib.sh中变量的“本地”声明之外,还有什么需要担心的吗?
这个问题的起点是注释“#由于我们使用了一些关联的数组,因此应该从函数外部包含此文件。” 来自yaourt程序。
git clone http://projects.archlinux.fr/yaourt.git
vim ./yaourt/src/lib/util.sh.in
来自bash的 文档
. filename [arguments]
source filename [arguments]
Run Code Online (Sandbox Code Playgroud)
在当前Shell环境中从文件名读取并执行命令,并返回从文件名执行的最后一条命令的退出状态。如果filename不包含斜杠,则PATH中的文件名用于查找包含filename的目录。在PATH中搜索的文件不必是可执行的。当bash不在posix模式下时,如果在PATH中找不到文件,则搜索当前目录。如果shopt内置命令的sourcepath选项已关闭,则不会搜索PATH。如果提供了任何参数,则在执行文件名时它们将成为位置参数。否则,位置参数将保持不变。返回状态是脚本中退出的最后一条命令的状态(如果未执行任何命令,则为0),如果找不到或无法读取文件名,则为false。
包 JSON::XS 使用 JSON::XS::Boolean 对象来表示真/假。是否可以将真/假 json 值强制解码为 1/0 Perl 数字?
#!/usr/bin/env perl
use JSON::XS;
use Data::Dumper;
my $json = decode_json(join('', <DATA>));
print Dumper $json;
__DATA__
{
"test_true": true,
"test_false": false
}
Run Code Online (Sandbox Code Playgroud)
输出:
$VAR1 = {
'test_true' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' ),
'test_false' => bless( do{\(my $o = 0)}, 'JSON::XS::Boolean' )
};
Run Code Online (Sandbox Code Playgroud)
在 decode_json 之后我想要这样的东西:
$VAR1 = {
'test_true' => 1,
'test_false' => 0
};
Run Code Online (Sandbox Code Playgroud)
原因:在某些情况下,很难预测 JSON::XS::Boolean 将如何使用 SOAP 序列化程序或其他序列化程序进行序列化。