标签/Tag为[模块]的文章

[Perl]关于 NDBM_File 的奇怪事

准备把本站的 Tag索引 写入 DBM ,折腾了一段Perl 小程序,使用了 NDBM_File 模块, 结果稀奇古怪。

代码如下;

#!/usr/bin/perl -w
use strict;
use CGI;
my $tagdir ='/blog/tag';
my $q = CGI->new;
print $q->header(-charset => 'utf-8');
use NDBM_File;
use Fcntl;
&do_tag_db();
sub do_tag_db
{
my $all_tag_text = $tagdir .'/tag.txt';
return 1 unless (-s $all_tag_text);
my $all_tag_db = $tagdir .'/tag.db';
return 1 if (-s $all_tag_db);
if (open my $fh, $all_tag_text) {
tie (my %DB, 'NDBM_File', $all_tag_db,O_RDWR|O_TRUNC|O_CREAT, 0666);
my @list =split ',', <$fh>;
close $fh;
foreach my $tmp (@list) { $DB{$tmp} = &getCacheFileName($tmp) ; }
untie %DB;
}
return 0;
}
sub getCacheFileName {
my($str) = @_;
$str =~ s!([^a-zA-Z0-9_.~-])!lc sprintf "%02x", ord($1)!eg;
$str;
}
1;
程序正常运行。但是在目标目录并没有发现所需要的 tag.db 文件, 而是一对文件,名字为 tag.db.dir 和 tag.db.pag

把上述文件的
use NDBM_File;
...
tie (my %DB, 'NDBM_File', $all_tag_db,O_RDWR|O_TRUNC|O_CREAT, 0666);
换成
use DB_File;
...
tie (my %DB, 'DB_File', $all_tag_db,O_RDWR|O_TRUNC|O_CREAT, 0666);
即改用 DB_File, 则一切正常。 tag.db 正常生成。

是什么原因呢?? 难道 NDBM_File 模块还有啥意外的用法? 看来 Perl 真的荒废很久了。。。

--EOF--

[Tips]MT4系列模板中的一些小技巧

MT 4 模板功能强大,从代码分析来看,加了一系列小的功能,并没有从默认的模板(Template)中体现出来:)
这些功能,有些来自MT4程序本身,有些来自自带的插件(plugin),还是挺实用的,如果再结合 MTIF ,MTElse, MTUnless 等模板自身的选择流程,肯定让设计界面的朋友心动:)
我简单的说两个自己偶然发现的,抛砖引玉。

1. MTIfCommenterIsEntryAuthor
这个标签目的是判断回复评论的人是否就是这个主题的发布者:) 我偶然发现这个标签,然后Blog中我回复别人评论的回复就可以自己定义不同的样式了:)简单用法如下:

<MTIfCommenterIsEntryAuthor>Show sth.</MTIfCommenterIsEntryAuthor>
,当然,需要注意的这个标签应该在 MTComments 嵌套之中使用:)实例可以参考本站的评论处我自己的评论样式.

2. 在 MTOtherBlog 中使用 加 include_blogs 参数的 MTInclude
这个功能是由插件 MultiBlog 2.0带来的,不可否认,MultiBlog是个很优秀的插件(plugin),但是,也不能不说MultiBlog使用文档实在写的太含糊。她的文档貌似仅仅为了 写而写。大家一般都用他来做多个Blog文章的输出,但是其实他的功能还很多,比如:在一个MT Blog 中调用另外一个同系统的Blog的模块,这个就是 MTInclude 的include_blogs 参数了,但是使用这个参数必须在 MTOtherBlog 或者 MTMultiBlog 的 嵌套中使用,不然系统会找不到模块,另外,这个模块如果有 IF,Else 或者 SetVar 的设置,将会调用本来属于的那个Blog的设置。
简单例子如下(本Blog的id为2,要调用id=1的Blog的模块 Nav_Main):

<MTOtherBlog include_blogs="1">
<$MTInclude include_blogs="1" module="Nav_Main"$>
</MTOtherBlog>

OK,我目前发现的就这两个,你呢?不妨共享之。

--EOF--