>Object 模块是在开发基于 File::System 的子模块时用的。 例如通过看 Real 的
源码,它就是继承了 Object。所以使用 File::System->new 时,现在可用的子模块有 Real, Table 等。

谢谢,我的问题好像解决了。

use strict;
use warnings;
use File::System;
use base qw( File::System::Object );

my $obj = File::System->new("Real");
my $root = $obj->root;
my $value = $obj->get_property("object_type");

die $@ if($@);


小结一下,File::System->new的时候会返回Object, 然后对这个Object调用各种方法就可以了。

谢谢各位。






2011/8/3 Qiang (James) <[email protected]>

> On 08/03/2011 02:06 PM, Phillip Huang wrote:
> > 谢谢James,
> >
> > 我之前尝试过你的建议,
> > #!/usr/bin/perl
> >
> > use strict;
> > use warnings;
> > use File::System;
> > use base qw( File::System::Object );
> >
> > my $root = File::System->new("Object", root=> '/tmp');
> >
> >
> > phillip@athens:/tmp$ perl 1.pl <http://1.pl>
> > Can't locate object method "new" via package "File::System::Object" at
> > 1.pl <http://1.pl> line 8
> >
> > 上面的Object换成Real是可以的。Object.pm中也并没有new这个方法。
> >
> >
>
> 大致看了一下 File::System 的设计
> http://search.cpan.org/~hanenkamp/File-System-1.16/
>
> File::System::Object    Abstract class that every file system module
> builds upon
>
> Object 模块是在开发基于 File::System 的子模块时用的。 例如通过看 Real 的
> 源码,它就是继承了 Object。
>
> 所以使用 File::System->new 时,现在可用的子模块有 Real, Table 等。
>
> Qiang
>
>
> >
> >
> >
> > 2011/8/3 Qiang (James) <[email protected] <mailto:[email protected]
> >>
> >
> >     文档和 test 文件你应该多看几遍。
> >
> >     File::System 里的文档里提到了
> >
> >     my $root = File::System->new("Real", root => '/var/chroot/foo');
> >
> >     我的理解是你可以把 Real 替换为 'Object',来调用 File::System::Object,这
> >     里调用的是 File::System::Real. File::System 的工作就是一个主的
> >     Factory,通过它可以调用其他分工厂。所以上面的例子就是调用 Real 分厂里的
> >     new 方法,并把其他变量(root => ...)传递过去。
> >
> >     看这个模块很久没有更新,2005 3月 出来一直更新到 12 月不知道是否靠谱。
> >
> >     Perl 本身就自带很多操作系统的函数和一些模块,建议还是使用这些成熟的。而
> >     且一般的骆驼书里都会对这些作些介绍。
> >
> >     Qiang
> >
> >     On 08/03/2011 01:43 PM, Phillip Huang wrote:
> >      > >my $obj = 'File::System::Object'; 这行不应该加单引号吧。这样声明
> >     的话你
> >      > 的obj是个字符串吧,并不是个对象
> >      > 我真是不知道怎样去new一个File::System::Object。
> >      >
> >      > 不过我模仿了.cpan/build/File-System-1.16-FnCixg/t/02_glob.t的写法:
> >      > #!/usr/bin/perl
> >      >
> >      > use strict;
> >      > use warnings;
> >      >
> >      > use base qw( File::System::Object );
> >      >
> >      > my $obj = 'File::System::Object';
> >      >
> >      > my @files = qw/
> >      > a ab abc abcd
> >      > b bc bcd
> >      > c cd
> >      > d
> >      > .a .ab .abc .abcd
> >      > .b .bc .bcd
> >      > .c .cd
> >      > .d
> >      > /;
> >      >
> >      > my @match_path = $obj->match_glob('a', @files);
> >      >
> >      > print $_ foreach @match_path;
> >      >
> >      >
> >      > phillip@athens:/tmp$ perl 1.pl <http://1.pl> <http://1.pl>
> >      > a
> >      >
> >      > 从上面看,是调用了File::System::Object的match_glob方法。
> >      >
> >      >
> >      >
> >      > 2011/8/3 金玉玮 <[email protected]
> >     <mailto:[email protected]> <mailto:[email protected]
> >     <mailto:[email protected]>>>
> >      >
> >      > my $obj = 'File::System::Object'; 这行不应该加单引号吧。这样声明的话
> >      > 你的obj是个字符串吧,并不是个对象
> >      >
> >      > 在 2011年8月3日 下午1:07,Phillip Huang <[email protected]
> >     <mailto:[email protected]>
> >      > <mailto:[email protected]
> >     <mailto:[email protected]>>>写道:
> >      >
> >      > 我参考.cpan/build/File-System-1.16-FnCixg/t/02_glob.t的写法。
> >      >
> >      >
> >      >
> >      > 2011/8/3 Robin Lee <[email protected]
> >     <mailto:[email protected]>
> >      > <mailto:[email protected] <mailto:[email protected]
> >>>
> >      >
> >      > 对象好像都没创建
> >      >
> >      > 2011/8/3 Phillip Huang <[email protected]
> >     <mailto:[email protected]>
> >      > <mailto:[email protected] <mailto:[email protected]
> >>>:
> >      > > Hi 各位,
> >      > > 本人最近在尝试用Perl写一个文件管理脚本,想使用
> >      > File::System模块。可是按照CPAN的文档(和File::System::Object
> >      > 的),我始终无法执行以下操作,如:
> >      > > #!/usr/bin/perl use strict; use warnings; use
> >      > File::System::Object; my $obj
> >      > > = 'File::System::Object'; my $file = $obj->root;
> >      > root@athens:/tmp# perl 1.pl <http://1.pl> <http://1.pl>
> >      > > Can't locate object method "root" via package
> >      > "File::System::Object" at 1.pl <http://1.pl> <http://1.pl>
> >      > > line 10.
> >      > > 我查看了object.pm <http://object.pm> <http://object.pm>,
> >      > > 并没有找到root这个方法。请各位高手帮我看看,或者举个例解
> >      > 释一些File::System和File::System::Object的简单用法。
> >      > > 先谢谢。
> >      > > Phillip
> >      > >
>
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
> 要向此网上论坛发帖,请发送电子邮件至 [email protected]。
> 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。
> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>
>

-- 
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 [email protected]。
要取消订阅此网上论坛,请发送电子邮件至 [email protected]。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

回复