整理 Notion 导出文档名称
从 Notion 导出 md 格式的文档,默认会对文件名做一些处理, 大概是这样,会讲过长的文档名称压缩,在首行使用 md 一级标签标记文件名,再将文档截断为图示的样子。 ...
从 Notion 导出 md 格式的文档,默认会对文件名做一些处理, 大概是这样,会讲过长的文档名称压缩,在首行使用 md 一级标签标记文件名,再将文档截断为图示的样子。 ...
最近写 Perl 程序时遇到一个很奇怪的问题: Insecure dependency in unlink while running with -T switch at ../tmpfile.pl line 44. 经过检查,发现这是 Perl 语言一个特性,在运行时使用 -w 或 -T 都意味着 “万无一失” 标志。 ...
当 python 需要调用 C 程序,或是进行文件、网络操作时,需要对二进制结构化字节流进行处理,此时需要使用到 struct 这个模块提供的方法。 详细方法可以查看 官方教程,这里以 perl 的 pack 作为对比,使用 python 实现类似 perl 数据打包的效果。 ...
结论 $var//=2:等价于 defined($var)||2,即 未定义 时才赋值为 2 ,否则不变( 即使是 0或 空字符串 ) $var||=2 :除非定义且为 true 才不会赋值,否则赋值(比如 0 或 空字符串 时)为2。 //= Step-1 空串 $var=''; $var//=2; print "'$var'\n"; # perl atest4.pl '' Step-2 0 $var=0; $var//=2; print "'$var'\n"; # perl atest4.pl '0' Step-3 1 $var=1; $var//=2; print "'$var'\n"; # perl atest4.pl '1' Step-4 undef $var=undef; $var//=2; print "'$var'\n"; # perl atest4.pl '2' ||= Step-1 空串 $var=''; $var||=2; print $var; # perl atest4.pl 2 Step-2 0 $var=0; $var||=2; print $var; # perl atest4.pl 2 Step-3 1 $var=1; $var||=2; print $var; # perl atest4.pl 1 Step-4 undef $var=undef; $var||=2; print $var; # perl atest4.pl 2
-r: File is readable by effective uid/gid. -w: File is writable by effective uid/gid. -x: File is executable by effective uid/gid. -o: File is owned by effective uid. -R: File is readable by real uid/gid. -W: File is writable by real uid/gid. -X: File is executable by real uid/gid. -O: File is owned by real uid. -e: File exists. -z: File has zero size (is empty). -s: File has nonzero size (returns size in bytes). -f: File is a plain file. -d: File is a directory. -l: File is a symbolic link. -p: File is a named pipe (FIFO), or Filehandle is a pipe. -S: File is a socket. -b: File is a block special file. -c: File is a character special file. -t: Filehandle is opened to a tty. -u: File has setuid bit set. -g: File has setgid bit set. -k: File has sticky bit set. -T: File is an ASCII text file (heuristic guess). -B: File is a "binary" file (opposite of -T). -M: Script start time minus file modification time, in days. -A: Same for access time. -C: Same for inode change time (Unix, may differ for other platforms) 参考文献 Alphabetical Listing of Perl Functions What does if( -f ) in Perl do? perl中 -e, -z, -s, -M, -A, -C, -r, -w, -x, -o, -f, -d , -l 含义
在调试 Perl 程序时常常需要打印哈希表内容,虽然可以直接使用 foreach 打印,但数据复杂了就难办了,此时可以将 Hash 表转换为 json 文本再打印: use JSON; my $data = {'info'=> "test", 'struct' => {'test1'=>'test1', 'test2'=>'test2'}}; my $json = new JSON; #$json->sort_by(sub { ncmp($JSON::PP::a, $JSON::PP::b) }); my $json_text = $json->pretty->encode ($data); print $json_text; 如果没有 json 包需要安装一下: ...
最近在看 PVE 源码时看到这样一段: # old code uses PVE::RPCEnvironment::get(); 使用冒号表示调用函数 # new code should use PVE::RPCEnvironment->get(); 使用箭头表示法调用方法 sub get { return PVE::RESTEnvironment->get(); } 好奇两种调用方式是什么区别,经过研究,我在这篇文章1找到答案,两者差异在于: ...
最近阅读 PVE 源码发现一处源码这样使用了 fork() 方法: $spid = fork(); if (!defined ($spid)) { die "can't put server into background - fork failed"; } elsif ($spid) { # parent exit (0); } 自己写示例发现这种方法可以使程序进入后台执行状态,大概原理是 fork 子进程,退出主进程,使得程序被 1 号父进程接管,在终端表现则是进入了后台执行状态。 ...
use base somemodule; # 相当于以下两句的结合: BEGIN{ use somemodule (); push @ISA, qw(somemodule); } # 也可以同时 use base 两个或者两个以上的模块,即多继承,例如: use base qw(Foo Bar); BEGIN { use Foo (); use Bar (); push @ISA, qw(Foo Bar); } Perl 里 类方法通过 @ISA 数组继承,这个数组里面包含其他包(类)的名字,变量的继承必须明确设定。 多继承就是这个 @ISA 数组包含多个类(包)名字。 通过 @ISA 只能继承方法,不能继承数据。 参考文献 Perl 面向对象 Perl 中的 use base 的用法
在调试 Perl 测试程序时,常常需要在测试路劲执行 Perl 脚本,相应的 .pm 模块测试程序也需并不在 Perl 默认的模块路径下,使用以下语句即可指定模块检索路径。 #!/usr/bin/perl use lib './'; use Person; # Person 包模块与当前脚本同级,可用上面两行代码指定包位置 ... 参考文献 Perl模块安装到非默认路径及其使用 两种指定Perl模块目录的方法(PERLLIB和use lib)