2010年8月12日星期四

Re: [PerlChina] 能从文件句柄来知道文件名称么

不同平台有不同的实现:

linux 可以用 /proc 文件系统:
$ perl -le 'open F, q(>>), q(/tmp/a.exe); print readlink(q(/proc/self/fd/).fileno(F))'
/tmp/a.exe

In Windows, with GetFileInformationByHandleEx, passing FileNameInfo, you can retrieve the file name.

参考:

2010/8/11 Michael Zeng <galaxy2004@gmail.com>
有了 fileno($FH) 返回的值(如
1,2,3) ,如何得到文件名称啊, 多谢


 
2010/8/11 joe jiang <lamp.purl@gmail.com>
可以考虑使用 fileno 函数:

jjiang@flatpan:~$ perl -le 'print fileno(STDIN)'
0
jjiang@flatpan:~$ perl -le 'print fileno(STDOUT)'
1
jjiang@flatpan:~$ perl -le 'print fileno(STDERR)'
2
jjiang@flatpan:~$ perl -le 'open F, q(>>), q(/tmp/a.exe); print fileno(F)'
3

有了这个文件的描述符标号信息,想知道文件名就很方便了。

2010/8/11 snyh <snyh@snyh.org>

这样必须确保   每次open()的 时候都进行处理。
如果文件不是你的代码打开的,而是通过其他人写的模块 那就不行了。
而且可能 不是所有的文件句柄都需保存, 仅个别文件需要知道文件名。


楼主的需求可能是比较特殊

在 2010年8月11日 上午9:50,cnhack TNT <cnhacktnt@gmail.com> 写道:
> open $f, $filename;
> $handles{fileno $f} = $filename;
> print $handles{fileno $f};
> 这样不挺和谐的么。。。
> 2010/8/9 Michael Zeng <galaxy2004@gmail.com>
>>
>> thanks
>>
>>
>> 2010/8/9 snyh <snyh@snyh.org>
>>>
>>> 这个是靠  linux 的  proc 文件系统,
>>> linux里面,  /proc   /sys都是内核虚拟出来的文件目录
>>> 提供系统的信息,也能够通过写这些文件里面的内容来改变系统的特性
>>>
>>> $ls /proc
>>> 就能看到很多目录, 里面数字开头的基本都 就是现在系统运行的程序PID
>>> 每个PID里面保存了 关于这个进程的信息, 所以可以从这里取得信息。
>>> 典型的几个值是
>>> /proc/PID/cwd   (当前目录)
>>> /proc/PID/exe   (程序名)
>>> /proc/PID/cmdline  (调用的参数)
>>> /proc/PID/fdinfo  (可以获取,文件句柄关联文件指针当前的位置)
>>>
>>> 具体可以参考网上其他介绍。
>>>
>>> 还有一个特殊的
>>> /proc/self 目录,  是当前进程符号链接
>>> 只是这里不能直接使用, 因为 ``是运行外部程序所有self就成外部程序了。
>>>
>>> perl里面既然有readlink 那么就可以更方便的 效率高一点点
>>>
>>>
>>> $name = readlink "/proc/self/fd/$n";
>>>
>>> 在 2010年8月9日 下午2:34,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> > 可以用  perl里面的 readlink
>>> >
>>> > 谢谢, 这个可以,
>>> >
>>> > my $n = fileno $fh;
>>> > my $name = `readlink /proc/$$/fd/$n`  or     ` ls  -l  /proc/$$/fd/$n |
>>> > awk
>>> > '{print  \$11}'  `
>>> >
>>> > 这2句啥意思,还能解释下,  为啥和进程号扯上了,
>>> >
>>> > 2010/8/9 snyh <snyh@snyh.org>
>>> >>
>>> >> 如果只是 linux下面的话 倒有个办法
>>> >>
>>> >> my $n = fileno $fh;
>>> >> my $name = `readlink /proc/$$/fd/$n`;
>>> >>
>>> >> fileno perl 原生函数
>>> >> readlink 是coreutils里面的工具,应该所有版本都会有的
>>> >> 嵌入式环境等 没有就用ls -l 然后分解出文件名。
>>> >>
>>> >> 在 2010年8月9日 下午1:46,snyh <snyh@snyh.org> 写道:
>>> >> > 这个办法行不通 太麻烦, 那还像上面说的 使用一个全局hash  存储所有的文件名
>>> >> >
>>> >> > 或者你使用 use FileHandle; 肯定行。   这样文件句柄就是个hash了
>>> >> >
>>> >> > 在 2010年8月9日 下午1:39,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >> use strict ;
>>> >> >> use warnings ;
>>> >> >>
>>> >> >>
>>> >> >> open(my $h, "<test.dat");
>>> >> >>
>>> >> >> my %h  ;   就行了,
>>> >> >> $h{name} = "test.dat";
>>> >> >>
>>> >> >>
>>> >> >> 不要紧,讨论问题么,吵架也正常,
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> 2010/8/9 snyh <snyh@snyh.org>
>>> >> >>>
>>> >> >>> 这个方式 是我错了。没测试就说了 没注意到申明问题
>>> >> >>> 以前都是对 "对象" 上面添加额外信息   想当然认为glob会自动转换。
>>> >> >>>
>>> >> >>> 影响您心情 对不住了
>>> >> >>> 我不该说那么多废话
>>> >> >>>
>>> >> >>> 在 2010年8月9日 下午1:28,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >>> > 咱就讨论个问题, 你哪来那么多话
>>> >> >>> >
>>> >> >>> > 就算你是绝顶高手, 也不能不允许别人鄙视吧,呵呵
>>> >> >>> >
>>> >> >>> > 你的代码:
>>> >> >>> >
>>> >> >>> > use strict ;
>>> >> >>> > use warnings ;
>>> >> >>> >
>>> >> >>> >
>>> >> >>> > open(my $h, "<test.dat");
>>> >> >>> > $h{name} = "test.dat";
>>> >> >>> > 有编译error,
>>> >> >>> >
>>> >> >>> > 你不会  不加  use strict /warnings 吧, 服了你了
>>> >> >>> >
>>> >> >>> >
>>> >> >>> >
>>> >> >>> > 2010/8/9 snyh <snyh@snyh.org>
>>> >> >>> >>
>>> >> >>> >> 把文件名存在文件句柄里面, 这样也是一一对应,并且存取的代价都可忽略不计,
>>> >> >>> >> 我当然知道您会, 只是这个方式您的语气似乎有些鄙视?
>>> >> >>> >> 这样也许会隐藏其他我没有想到的问题,
>>> >> >>> >> 反正为以前写perl-gtk的时候,都是把数据存在object里面,不使用GTK本身的user_data
>>> >> >>> >>
>>> >> >>> >> 如果不是使用filehandle 模块, 文件句柄是一个glob,
>>> >> >>> >> 你直接把它当作hash使用也行,自动创建了一个哈希(我想内存方面的问题,如果用perl,这点消耗完全没必要考虑)
>>> >> >>> >>
>>> >> >>> >> 我觉得有问题是,
>>> >> >>> >> "就是 我要打开的文件太多
>>> >> >>> >>  很多 file handle ,
>>> >> >>> >>  要回到很前面 才查到 打开哪个文件,如果 能从 handle直接 知道 就好了"
>>> >> >>> >> 既然 你能"回到很前面"(我想的是,前面代表代码前面)查到那个是那个文件。
>>> >> >>> >> 那你不知道那个handle是那个文件, 是不是你自己的代码组织有问题?
>>> >> >>> >> 文件再多能有多少?  不可能您的程序是万能程序,需要处理世界上所有的事情吧?
>>> >> >>> >> 程序只是关注一定范围的事情,
>>> >> >>> >> 哪个filehandle对应那个文件你自己都搞不清楚(或者说整理不清楚)你如何组织程序的主要逻辑?
>>> >> >>> >>
>>> >> >>> >> 我阅历有限,暂时能想到的只有一种情况,需要通过句柄知道文件名
>>> >> >>> >> --- 代码不是你一个人写的,在团队中,
>>> >> >>> >> 需要调用其他人的代码,所有不知道对应文件名很正常。不过调研代码都到了文件句柄这个层次,也有点太紧耦合了吧?
>>> >> >>> >>
>>> >> >>> >> 在 2010年8月9日 上午6:44,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >>> >> > 有啥问题
>>> >> >>> >> >
>>> >> >>> >> >
>>> >> >>> >> > 你这创建了  %h  , 啊, 我也会啊
>>> >> >>> >> >
>>> >> >>> >> > 2010/8/8 snyh <snyh@snyh.org>
>>> >> >>> >> >>
>>> >> >>> >> >> open(my $h, "<test.dat");
>>> >> >>> >> >> $h{name} = "test.dat";
>>> >> >>> >> >>
>>> >> >>> >> >> 打开文件时,把文件名存在filehandle里面 也许比较适合
>>> >> >>> >> >>
>>> >> >>> >> >> 不过你这个需求,貌似有问题。。。
>>> >> >>> >> >> 在 2010年8月8日 上午7:44,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >>> >> >> > 就是 我要打开的文件太多
>>> >> >>> >> >> >
>>> >> >>> >> >> > 很多 file handle ,
>>> >> >>> >> >> >
>>> >> >>> >> >> > 要回到很前面 才查到 打开哪个文件,如果 能从 handle直接 知道 就好了
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> > 2010/8/8 Huangj <redspid@163.com>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 介个需求是如何产生的?
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> At 2010-08-05 22:30:08,"Michael Zeng"
>>> >> >>> >> >> >> <galaxy2004@gmail.com>
>>> >> >>> >> >> >> wrote:
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 就是
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>  open my $F1, '<',  'ABC'
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> or   open my $F2 , '>' ,  "DEF" ;
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 现在 拿到 $F1, $F2 , 如何返回文件的名称呢
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 比如ABC , DEF
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> --
>>> >> >>> >> >> >>             Yours Sincerely
>>> >> >>> >> >> >>                     Zeng Hong
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> --
>>> >> >>> >> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> >> 要取消订阅此网上论坛,请发送电子邮件至
>>> >> >>> >> >> >> perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> >> 若有更多问题,请通过
>>> >> >>> >> >> >> http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> >> 访问此网上论坛。
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> ________________________________
>>> >> >>> >> >> >> 您想拥有和网易免费邮箱一样强大的软件吗?
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> --
>>> >> >>> >> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> >> 要取消订阅此网上论坛,请发送电子邮件至
>>> >> >>> >> >> >> perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> >> 若有更多问题,请通过
>>> >> >>> >> >> >> http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> >> 访问此网上论坛。
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> > --
>>> >> >>> >> >> >             Yours Sincerely
>>> >> >>> >> >> >                     Zeng Hong
>>> >> >>> >> >> >
>>> >> >>> >> >> > --
>>> >> >>> >> >> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> > 要取消订阅此网上论坛,请发送电子邮件至
>>> >> >>> >> >> > perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> > 若有更多问题,请通过
>>> >> >>> >> >> > http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> > 访问此网上论坛。
>>> >> >>> >> >> >
>>> >> >>> >> >>
>>> >> >>> >> >> --
>>> >> >>> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> 访问此网上论坛。
>>> >> >>> >> >>
>>> >> >>> >> >
>>> >> >>> >> >
>>> >> >>> >> >
>>> >> >>> >> > --
>>> >> >>> >> >             Yours Sincerely
>>> >> >>> >> >                     Zeng Hong
>>> >> >>> >> >
>>> >> >>> >> > --
>>> >> >>> >> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> > 访问此网上论坛。
>>> >> >>> >> >
>>> >> >>> >>
>>> >> >>> >> --
>>> >> >>> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> 访问此网上论坛。
>>> >> >>> >>
>>> >> >>> >
>>> >> >>> >
>>> >> >>> >
>>> >> >>> > --
>>> >> >>> >             Yours Sincerely
>>> >> >>> >                     Zeng Hong
>>> >> >>> >
>>> >> >>> > --
>>> >> >>> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> > 访问此网上论坛。
>>> >> >>> >
>>> >> >>>
>>> >> >>> --
>>> >> >>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> 访问此网上论坛。
>>> >> >>>
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> --
>>> >> >>             Yours Sincerely
>>> >> >>                     Zeng Hong
>>> >> >>
>>> >> >> --
>>> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >> 访问此网上论坛。
>>> >> >>
>>> >> >
>>> >>
>>> >> --
>>> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>> >>
>>> >
>>> >
>>> >
>>> > --
>>> >             Yours Sincerely
>>> >                     Zeng Hong
>>> >
>>> > --
>>> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>> >
>>>
>>> --
>>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>>
>>
>>
>>
>> --
>>             Yours Sincerely
>>                     Zeng Hong
>>
>> --
>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>

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


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



--
            Yours Sincerely
                    Zeng Hong

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

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

2010年8月11日星期三

Re: [PerlChina] 有擅长网站日志分析的朋友吗?

应该有这样的需求吧,不过先要你们那边有具体的服务推出,人家才知道啊


2010/8/1 光风 <breeze.guangfeng@gmail.com>
做api方式 允许用户实时提交日志 内部系统 我就是这么设计的 前端大概也有几十台的样子

2010/7/15 imxae <imx365ster@gmail.com>

大日志文件上传不方便

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



--
光风 @ http://webisbeauty.appspot.com/

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

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

Re: [PerlChina] 能从文件句柄来知道文件名称么

有了 fileno($FH) 返回的值(如
1,2,3) ,如何得到文件名称啊, 多谢


 
2010/8/11 joe jiang <lamp.purl@gmail.com>
可以考虑使用 fileno 函数:

jjiang@flatpan:~$ perl -le 'print fileno(STDIN)'
0
jjiang@flatpan:~$ perl -le 'print fileno(STDOUT)'
1
jjiang@flatpan:~$ perl -le 'print fileno(STDERR)'
2
jjiang@flatpan:~$ perl -le 'open F, q(>>), q(/tmp/a.exe); print fileno(F)'
3

有了这个文件的描述符标号信息,想知道文件名就很方便了。

2010/8/11 snyh <snyh@snyh.org>

这样必须确保   每次open()的 时候都进行处理。
如果文件不是你的代码打开的,而是通过其他人写的模块 那就不行了。
而且可能 不是所有的文件句柄都需保存, 仅个别文件需要知道文件名。


楼主的需求可能是比较特殊

在 2010年8月11日 上午9:50,cnhack TNT <cnhacktnt@gmail.com> 写道:
> open $f, $filename;
> $handles{fileno $f} = $filename;
> print $handles{fileno $f};
> 这样不挺和谐的么。。。
> 2010/8/9 Michael Zeng <galaxy2004@gmail.com>
>>
>> thanks
>>
>>
>> 2010/8/9 snyh <snyh@snyh.org>
>>>
>>> 这个是靠  linux 的  proc 文件系统,
>>> linux里面,  /proc   /sys都是内核虚拟出来的文件目录
>>> 提供系统的信息,也能够通过写这些文件里面的内容来改变系统的特性
>>>
>>> $ls /proc
>>> 就能看到很多目录, 里面数字开头的基本都 就是现在系统运行的程序PID
>>> 每个PID里面保存了 关于这个进程的信息, 所以可以从这里取得信息。
>>> 典型的几个值是
>>> /proc/PID/cwd   (当前目录)
>>> /proc/PID/exe   (程序名)
>>> /proc/PID/cmdline  (调用的参数)
>>> /proc/PID/fdinfo  (可以获取,文件句柄关联文件指针当前的位置)
>>>
>>> 具体可以参考网上其他介绍。
>>>
>>> 还有一个特殊的
>>> /proc/self 目录,  是当前进程符号链接
>>> 只是这里不能直接使用, 因为 ``是运行外部程序所有self就成外部程序了。
>>>
>>> perl里面既然有readlink 那么就可以更方便的 效率高一点点
>>>
>>>
>>> $name = readlink "/proc/self/fd/$n";
>>>
>>> 在 2010年8月9日 下午2:34,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> > 可以用  perl里面的 readlink
>>> >
>>> > 谢谢, 这个可以,
>>> >
>>> > my $n = fileno $fh;
>>> > my $name = `readlink /proc/$$/fd/$n`  or     ` ls  -l  /proc/$$/fd/$n |
>>> > awk
>>> > '{print  \$11}'  `
>>> >
>>> > 这2句啥意思,还能解释下,  为啥和进程号扯上了,
>>> >
>>> > 2010/8/9 snyh <snyh@snyh.org>
>>> >>
>>> >> 如果只是 linux下面的话 倒有个办法
>>> >>
>>> >> my $n = fileno $fh;
>>> >> my $name = `readlink /proc/$$/fd/$n`;
>>> >>
>>> >> fileno perl 原生函数
>>> >> readlink 是coreutils里面的工具,应该所有版本都会有的
>>> >> 嵌入式环境等 没有就用ls -l 然后分解出文件名。
>>> >>
>>> >> 在 2010年8月9日 下午1:46,snyh <snyh@snyh.org> 写道:
>>> >> > 这个办法行不通 太麻烦, 那还像上面说的 使用一个全局hash  存储所有的文件名
>>> >> >
>>> >> > 或者你使用 use FileHandle; 肯定行。   这样文件句柄就是个hash了
>>> >> >
>>> >> > 在 2010年8月9日 下午1:39,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >> use strict ;
>>> >> >> use warnings ;
>>> >> >>
>>> >> >>
>>> >> >> open(my $h, "<test.dat");
>>> >> >>
>>> >> >> my %h  ;   就行了,
>>> >> >> $h{name} = "test.dat";
>>> >> >>
>>> >> >>
>>> >> >> 不要紧,讨论问题么,吵架也正常,
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> 2010/8/9 snyh <snyh@snyh.org>
>>> >> >>>
>>> >> >>> 这个方式 是我错了。没测试就说了 没注意到申明问题
>>> >> >>> 以前都是对 "对象" 上面添加额外信息   想当然认为glob会自动转换。
>>> >> >>>
>>> >> >>> 影响您心情 对不住了
>>> >> >>> 我不该说那么多废话
>>> >> >>>
>>> >> >>> 在 2010年8月9日 下午1:28,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >>> > 咱就讨论个问题, 你哪来那么多话
>>> >> >>> >
>>> >> >>> > 就算你是绝顶高手, 也不能不允许别人鄙视吧,呵呵
>>> >> >>> >
>>> >> >>> > 你的代码:
>>> >> >>> >
>>> >> >>> > use strict ;
>>> >> >>> > use warnings ;
>>> >> >>> >
>>> >> >>> >
>>> >> >>> > open(my $h, "<test.dat");
>>> >> >>> > $h{name} = "test.dat";
>>> >> >>> > 有编译error,
>>> >> >>> >
>>> >> >>> > 你不会  不加  use strict /warnings 吧, 服了你了
>>> >> >>> >
>>> >> >>> >
>>> >> >>> >
>>> >> >>> > 2010/8/9 snyh <snyh@snyh.org>
>>> >> >>> >>
>>> >> >>> >> 把文件名存在文件句柄里面, 这样也是一一对应,并且存取的代价都可忽略不计,
>>> >> >>> >> 我当然知道您会, 只是这个方式您的语气似乎有些鄙视?
>>> >> >>> >> 这样也许会隐藏其他我没有想到的问题,
>>> >> >>> >> 反正为以前写perl-gtk的时候,都是把数据存在object里面,不使用GTK本身的user_data
>>> >> >>> >>
>>> >> >>> >> 如果不是使用filehandle 模块, 文件句柄是一个glob,
>>> >> >>> >> 你直接把它当作hash使用也行,自动创建了一个哈希(我想内存方面的问题,如果用perl,这点消耗完全没必要考虑)
>>> >> >>> >>
>>> >> >>> >> 我觉得有问题是,
>>> >> >>> >> "就是 我要打开的文件太多
>>> >> >>> >>  很多 file handle ,
>>> >> >>> >>  要回到很前面 才查到 打开哪个文件,如果 能从 handle直接 知道 就好了"
>>> >> >>> >> 既然 你能"回到很前面"(我想的是,前面代表代码前面)查到那个是那个文件。
>>> >> >>> >> 那你不知道那个handle是那个文件, 是不是你自己的代码组织有问题?
>>> >> >>> >> 文件再多能有多少?  不可能您的程序是万能程序,需要处理世界上所有的事情吧?
>>> >> >>> >> 程序只是关注一定范围的事情,
>>> >> >>> >> 哪个filehandle对应那个文件你自己都搞不清楚(或者说整理不清楚)你如何组织程序的主要逻辑?
>>> >> >>> >>
>>> >> >>> >> 我阅历有限,暂时能想到的只有一种情况,需要通过句柄知道文件名
>>> >> >>> >> --- 代码不是你一个人写的,在团队中,
>>> >> >>> >> 需要调用其他人的代码,所有不知道对应文件名很正常。不过调研代码都到了文件句柄这个层次,也有点太紧耦合了吧?
>>> >> >>> >>
>>> >> >>> >> 在 2010年8月9日 上午6:44,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >>> >> > 有啥问题
>>> >> >>> >> >
>>> >> >>> >> >
>>> >> >>> >> > 你这创建了  %h  , 啊, 我也会啊
>>> >> >>> >> >
>>> >> >>> >> > 2010/8/8 snyh <snyh@snyh.org>
>>> >> >>> >> >>
>>> >> >>> >> >> open(my $h, "<test.dat");
>>> >> >>> >> >> $h{name} = "test.dat";
>>> >> >>> >> >>
>>> >> >>> >> >> 打开文件时,把文件名存在filehandle里面 也许比较适合
>>> >> >>> >> >>
>>> >> >>> >> >> 不过你这个需求,貌似有问题。。。
>>> >> >>> >> >> 在 2010年8月8日 上午7:44,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >>> >> >> > 就是 我要打开的文件太多
>>> >> >>> >> >> >
>>> >> >>> >> >> > 很多 file handle ,
>>> >> >>> >> >> >
>>> >> >>> >> >> > 要回到很前面 才查到 打开哪个文件,如果 能从 handle直接 知道 就好了
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> > 2010/8/8 Huangj <redspid@163.com>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 介个需求是如何产生的?
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> At 2010-08-05 22:30:08,"Michael Zeng"
>>> >> >>> >> >> >> <galaxy2004@gmail.com>
>>> >> >>> >> >> >> wrote:
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 就是
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>  open my $F1, '<',  'ABC'
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> or   open my $F2 , '>' ,  "DEF" ;
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 现在 拿到 $F1, $F2 , 如何返回文件的名称呢
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 比如ABC , DEF
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> --
>>> >> >>> >> >> >>             Yours Sincerely
>>> >> >>> >> >> >>                     Zeng Hong
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> --
>>> >> >>> >> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> >> 要取消订阅此网上论坛,请发送电子邮件至
>>> >> >>> >> >> >> perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> >> 若有更多问题,请通过
>>> >> >>> >> >> >> http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> >> 访问此网上论坛。
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> ________________________________
>>> >> >>> >> >> >> 您想拥有和网易免费邮箱一样强大的软件吗?
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> --
>>> >> >>> >> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> >> 要取消订阅此网上论坛,请发送电子邮件至
>>> >> >>> >> >> >> perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> >> 若有更多问题,请通过
>>> >> >>> >> >> >> http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> >> 访问此网上论坛。
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> > --
>>> >> >>> >> >> >             Yours Sincerely
>>> >> >>> >> >> >                     Zeng Hong
>>> >> >>> >> >> >
>>> >> >>> >> >> > --
>>> >> >>> >> >> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> > 要取消订阅此网上论坛,请发送电子邮件至
>>> >> >>> >> >> > perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> > 若有更多问题,请通过
>>> >> >>> >> >> > http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> > 访问此网上论坛。
>>> >> >>> >> >> >
>>> >> >>> >> >>
>>> >> >>> >> >> --
>>> >> >>> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> 访问此网上论坛。
>>> >> >>> >> >>
>>> >> >>> >> >
>>> >> >>> >> >
>>> >> >>> >> >
>>> >> >>> >> > --
>>> >> >>> >> >             Yours Sincerely
>>> >> >>> >> >                     Zeng Hong
>>> >> >>> >> >
>>> >> >>> >> > --
>>> >> >>> >> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> > 访问此网上论坛。
>>> >> >>> >> >
>>> >> >>> >>
>>> >> >>> >> --
>>> >> >>> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> 访问此网上论坛。
>>> >> >>> >>
>>> >> >>> >
>>> >> >>> >
>>> >> >>> >
>>> >> >>> > --
>>> >> >>> >             Yours Sincerely
>>> >> >>> >                     Zeng Hong
>>> >> >>> >
>>> >> >>> > --
>>> >> >>> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> > 访问此网上论坛。
>>> >> >>> >
>>> >> >>>
>>> >> >>> --
>>> >> >>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> 访问此网上论坛。
>>> >> >>>
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> --
>>> >> >>             Yours Sincerely
>>> >> >>                     Zeng Hong
>>> >> >>
>>> >> >> --
>>> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >> 访问此网上论坛。
>>> >> >>
>>> >> >
>>> >>
>>> >> --
>>> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>> >>
>>> >
>>> >
>>> >
>>> > --
>>> >             Yours Sincerely
>>> >                     Zeng Hong
>>> >
>>> > --
>>> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>> >
>>>
>>> --
>>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>>
>>
>>
>>
>> --
>>             Yours Sincerely
>>                     Zeng Hong
>>
>> --
>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>

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


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



--
            Yours Sincerely
                    Zeng Hong

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

Re: [PerlChina] 能从文件句柄来知道文件名称么

可以考虑使用 fileno 函数:

jjiang@flatpan:~$ perl -le 'print fileno(STDIN)'
0
jjiang@flatpan:~$ perl -le 'print fileno(STDOUT)'
1
jjiang@flatpan:~$ perl -le 'print fileno(STDERR)'
2
jjiang@flatpan:~$ perl -le 'open F, q(>>), q(/tmp/a.exe); print fileno(F)'
3

有了这个文件的描述符标号信息,想知道文件名就很方便了。

2010/8/11 snyh <snyh@snyh.org>
这样必须确保   每次open()的 时候都进行处理。
如果文件不是你的代码打开的,而是通过其他人写的模块 那就不行了。
而且可能 不是所有的文件句柄都需保存, 仅个别文件需要知道文件名。


楼主的需求可能是比较特殊

在 2010年8月11日 上午9:50,cnhack TNT <cnhacktnt@gmail.com> 写道:
> open $f, $filename;
> $handles{fileno $f} = $filename;
> print $handles{fileno $f};
> 这样不挺和谐的么。。。
> 2010/8/9 Michael Zeng <galaxy2004@gmail.com>
>>
>> thanks
>>
>>
>> 2010/8/9 snyh <snyh@snyh.org>
>>>
>>> 这个是靠  linux 的  proc 文件系统,
>>> linux里面,  /proc   /sys都是内核虚拟出来的文件目录
>>> 提供系统的信息,也能够通过写这些文件里面的内容来改变系统的特性
>>>
>>> $ls /proc
>>> 就能看到很多目录, 里面数字开头的基本都 就是现在系统运行的程序PID
>>> 每个PID里面保存了 关于这个进程的信息, 所以可以从这里取得信息。
>>> 典型的几个值是
>>> /proc/PID/cwd   (当前目录)
>>> /proc/PID/exe   (程序名)
>>> /proc/PID/cmdline  (调用的参数)
>>> /proc/PID/fdinfo  (可以获取,文件句柄关联文件指针当前的位置)
>>>
>>> 具体可以参考网上其他介绍。
>>>
>>> 还有一个特殊的
>>> /proc/self 目录,  是当前进程符号链接
>>> 只是这里不能直接使用, 因为 ``是运行外部程序所有self就成外部程序了。
>>>
>>> perl里面既然有readlink 那么就可以更方便的 效率高一点点
>>>
>>>
>>> $name = readlink "/proc/self/fd/$n";
>>>
>>> 在 2010年8月9日 下午2:34,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> > 可以用  perl里面的 readlink
>>> >
>>> > 谢谢, 这个可以,
>>> >
>>> > my $n = fileno $fh;
>>> > my $name = `readlink /proc/$$/fd/$n`  or     ` ls  -l  /proc/$$/fd/$n |
>>> > awk
>>> > '{print  \$11}'  `
>>> >
>>> > 这2句啥意思,还能解释下,  为啥和进程号扯上了,
>>> >
>>> > 2010/8/9 snyh <snyh@snyh.org>
>>> >>
>>> >> 如果只是 linux下面的话 倒有个办法
>>> >>
>>> >> my $n = fileno $fh;
>>> >> my $name = `readlink /proc/$$/fd/$n`;
>>> >>
>>> >> fileno perl 原生函数
>>> >> readlink 是coreutils里面的工具,应该所有版本都会有的
>>> >> 嵌入式环境等 没有就用ls -l 然后分解出文件名。
>>> >>
>>> >> 在 2010年8月9日 下午1:46,snyh <snyh@snyh.org> 写道:
>>> >> > 这个办法行不通 太麻烦, 那还像上面说的 使用一个全局hash  存储所有的文件名
>>> >> >
>>> >> > 或者你使用 use FileHandle; 肯定行。   这样文件句柄就是个hash了
>>> >> >
>>> >> > 在 2010年8月9日 下午1:39,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >> use strict ;
>>> >> >> use warnings ;
>>> >> >>
>>> >> >>
>>> >> >> open(my $h, "<test.dat");
>>> >> >>
>>> >> >> my %h  ;   就行了,
>>> >> >> $h{name} = "test.dat";
>>> >> >>
>>> >> >>
>>> >> >> 不要紧,讨论问题么,吵架也正常,
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> 2010/8/9 snyh <snyh@snyh.org>
>>> >> >>>
>>> >> >>> 这个方式 是我错了。没测试就说了 没注意到申明问题
>>> >> >>> 以前都是对 "对象" 上面添加额外信息   想当然认为glob会自动转换。
>>> >> >>>
>>> >> >>> 影响您心情 对不住了
>>> >> >>> 我不该说那么多废话
>>> >> >>>
>>> >> >>> 在 2010年8月9日 下午1:28,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >>> > 咱就讨论个问题, 你哪来那么多话
>>> >> >>> >
>>> >> >>> > 就算你是绝顶高手, 也不能不允许别人鄙视吧,呵呵
>>> >> >>> >
>>> >> >>> > 你的代码:
>>> >> >>> >
>>> >> >>> > use strict ;
>>> >> >>> > use warnings ;
>>> >> >>> >
>>> >> >>> >
>>> >> >>> > open(my $h, "<test.dat");
>>> >> >>> > $h{name} = "test.dat";
>>> >> >>> > 有编译error,
>>> >> >>> >
>>> >> >>> > 你不会  不加  use strict /warnings 吧, 服了你了
>>> >> >>> >
>>> >> >>> >
>>> >> >>> >
>>> >> >>> > 2010/8/9 snyh <snyh@snyh.org>
>>> >> >>> >>
>>> >> >>> >> 把文件名存在文件句柄里面, 这样也是一一对应,并且存取的代价都可忽略不计,
>>> >> >>> >> 我当然知道您会, 只是这个方式您的语气似乎有些鄙视?
>>> >> >>> >> 这样也许会隐藏其他我没有想到的问题,
>>> >> >>> >> 反正为以前写perl-gtk的时候,都是把数据存在object里面,不使用GTK本身的user_data
>>> >> >>> >>
>>> >> >>> >> 如果不是使用filehandle 模块, 文件句柄是一个glob,
>>> >> >>> >> 你直接把它当作hash使用也行,自动创建了一个哈希(我想内存方面的问题,如果用perl,这点消耗完全没必要考虑)
>>> >> >>> >>
>>> >> >>> >> 我觉得有问题是,
>>> >> >>> >> "就是 我要打开的文件太多
>>> >> >>> >>  很多 file handle ,
>>> >> >>> >>  要回到很前面 才查到 打开哪个文件,如果 能从 handle直接 知道 就好了"
>>> >> >>> >> 既然 你能"回到很前面"(我想的是,前面代表代码前面)查到那个是那个文件。
>>> >> >>> >> 那你不知道那个handle是那个文件, 是不是你自己的代码组织有问题?
>>> >> >>> >> 文件再多能有多少?  不可能您的程序是万能程序,需要处理世界上所有的事情吧?
>>> >> >>> >> 程序只是关注一定范围的事情,
>>> >> >>> >> 哪个filehandle对应那个文件你自己都搞不清楚(或者说整理不清楚)你如何组织程序的主要逻辑?
>>> >> >>> >>
>>> >> >>> >> 我阅历有限,暂时能想到的只有一种情况,需要通过句柄知道文件名
>>> >> >>> >> --- 代码不是你一个人写的,在团队中,
>>> >> >>> >> 需要调用其他人的代码,所有不知道对应文件名很正常。不过调研代码都到了文件句柄这个层次,也有点太紧耦合了吧?
>>> >> >>> >>
>>> >> >>> >> 在 2010年8月9日 上午6:44,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >>> >> > 有啥问题
>>> >> >>> >> >
>>> >> >>> >> >
>>> >> >>> >> > 你这创建了  %h  , 啊, 我也会啊
>>> >> >>> >> >
>>> >> >>> >> > 2010/8/8 snyh <snyh@snyh.org>
>>> >> >>> >> >>
>>> >> >>> >> >> open(my $h, "<test.dat");
>>> >> >>> >> >> $h{name} = "test.dat";
>>> >> >>> >> >>
>>> >> >>> >> >> 打开文件时,把文件名存在filehandle里面 也许比较适合
>>> >> >>> >> >>
>>> >> >>> >> >> 不过你这个需求,貌似有问题。。。
>>> >> >>> >> >> 在 2010年8月8日 上午7:44,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >>> >> >> > 就是 我要打开的文件太多
>>> >> >>> >> >> >
>>> >> >>> >> >> > 很多 file handle ,
>>> >> >>> >> >> >
>>> >> >>> >> >> > 要回到很前面 才查到 打开哪个文件,如果 能从 handle直接 知道 就好了
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> > 2010/8/8 Huangj <redspid@163.com>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 介个需求是如何产生的?
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> At 2010-08-05 22:30:08,"Michael Zeng"
>>> >> >>> >> >> >> <galaxy2004@gmail.com>
>>> >> >>> >> >> >> wrote:
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 就是
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>  open my $F1, '<',  'ABC'
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> or   open my $F2 , '>' ,  "DEF" ;
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 现在 拿到 $F1, $F2 , 如何返回文件的名称呢
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 比如ABC , DEF
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> --
>>> >> >>> >> >> >>             Yours Sincerely
>>> >> >>> >> >> >>                     Zeng Hong
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> --
>>> >> >>> >> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> >> 要取消订阅此网上论坛,请发送电子邮件至
>>> >> >>> >> >> >> perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> >> 若有更多问题,请通过
>>> >> >>> >> >> >> http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> >> 访问此网上论坛。
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> ________________________________
>>> >> >>> >> >> >> 您想拥有和网易免费邮箱一样强大的软件吗?
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> --
>>> >> >>> >> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> >> 要取消订阅此网上论坛,请发送电子邮件至
>>> >> >>> >> >> >> perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> >> 若有更多问题,请通过
>>> >> >>> >> >> >> http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> >> 访问此网上论坛。
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> > --
>>> >> >>> >> >> >             Yours Sincerely
>>> >> >>> >> >> >                     Zeng Hong
>>> >> >>> >> >> >
>>> >> >>> >> >> > --
>>> >> >>> >> >> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> > 要取消订阅此网上论坛,请发送电子邮件至
>>> >> >>> >> >> > perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> > 若有更多问题,请通过
>>> >> >>> >> >> > http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> > 访问此网上论坛。
>>> >> >>> >> >> >
>>> >> >>> >> >>
>>> >> >>> >> >> --
>>> >> >>> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> 访问此网上论坛。
>>> >> >>> >> >>
>>> >> >>> >> >
>>> >> >>> >> >
>>> >> >>> >> >
>>> >> >>> >> > --
>>> >> >>> >> >             Yours Sincerely
>>> >> >>> >> >                     Zeng Hong
>>> >> >>> >> >
>>> >> >>> >> > --
>>> >> >>> >> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> > 访问此网上论坛。
>>> >> >>> >> >
>>> >> >>> >>
>>> >> >>> >> --
>>> >> >>> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> 访问此网上论坛。
>>> >> >>> >>
>>> >> >>> >
>>> >> >>> >
>>> >> >>> >
>>> >> >>> > --
>>> >> >>> >             Yours Sincerely
>>> >> >>> >                     Zeng Hong
>>> >> >>> >
>>> >> >>> > --
>>> >> >>> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> > 访问此网上论坛。
>>> >> >>> >
>>> >> >>>
>>> >> >>> --
>>> >> >>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> 访问此网上论坛。
>>> >> >>>
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> --
>>> >> >>             Yours Sincerely
>>> >> >>                     Zeng Hong
>>> >> >>
>>> >> >> --
>>> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >> 访问此网上论坛。
>>> >> >>
>>> >> >
>>> >>
>>> >> --
>>> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>> >>
>>> >
>>> >
>>> >
>>> > --
>>> >             Yours Sincerely
>>> >                     Zeng Hong
>>> >
>>> > --
>>> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>> >
>>>
>>> --
>>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>>
>>
>>
>>
>> --
>>             Yours Sincerely
>>                     Zeng Hong
>>
>> --
>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>

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


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

2010年8月10日星期二

Re: [PerlChina] 能从文件句柄来知道文件名称么

这样必须确保 每次open()的 时候都进行处理。
如果文件不是你的代码打开的,而是通过其他人写的模块 那就不行了。
而且可能 不是所有的文件句柄都需保存, 仅个别文件需要知道文件名。


楼主的需求可能是比较特殊

在 2010年8月11日 上午9:50,cnhack TNT <cnhacktnt@gmail.com> 写道:
> open $f, $filename;
> $handles{fileno $f} = $filename;
> print $handles{fileno $f};
> 这样不挺和谐的么。。。
> 2010/8/9 Michael Zeng <galaxy2004@gmail.com>
>>
>> thanks
>>
>>
>> 2010/8/9 snyh <snyh@snyh.org>
>>>
>>> 这个是靠 linux 的 proc 文件系统,
>>> linux里面, /proc /sys都是内核虚拟出来的文件目录
>>> 提供系统的信息,也能够通过写这些文件里面的内容来改变系统的特性
>>>
>>> $ls /proc
>>> 就能看到很多目录, 里面数字开头的基本都 就是现在系统运行的程序PID
>>> 每个PID里面保存了 关于这个进程的信息, 所以可以从这里取得信息。
>>> 典型的几个值是
>>> /proc/PID/cwd (当前目录)
>>> /proc/PID/exe (程序名)
>>> /proc/PID/cmdline (调用的参数)
>>> /proc/PID/fdinfo (可以获取,文件句柄关联文件指针当前的位置)
>>>
>>> 具体可以参考网上其他介绍。
>>>
>>> 还有一个特殊的
>>> /proc/self 目录, 是当前进程符号链接
>>> 只是这里不能直接使用, 因为 ``是运行外部程序所有self就成外部程序了。
>>>
>>> perl里面既然有readlink 那么就可以更方便的 效率高一点点
>>>
>>>
>>> $name = readlink "/proc/self/fd/$n";
>>>
>>> 在 2010年8月9日 下午2:34,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> > 可以用 perl里面的 readlink
>>> >
>>> > 谢谢, 这个可以,
>>> >
>>> > my $n = fileno $fh;
>>> > my $name = `readlink /proc/$$/fd/$n` or ` ls -l /proc/$$/fd/$n |
>>> > awk
>>> > '{print \$11}' `
>>> >
>>> > 这2句啥意思,还能解释下, 为啥和进程号扯上了,
>>> >
>>> > 2010/8/9 snyh <snyh@snyh.org>
>>> >>
>>> >> 如果只是 linux下面的话 倒有个办法
>>> >>
>>> >> my $n = fileno $fh;
>>> >> my $name = `readlink /proc/$$/fd/$n`;
>>> >>
>>> >> fileno perl 原生函数
>>> >> readlink 是coreutils里面的工具,应该所有版本都会有的
>>> >> 嵌入式环境等 没有就用ls -l 然后分解出文件名。
>>> >>
>>> >> 在 2010年8月9日 下午1:46,snyh <snyh@snyh.org> 写道:
>>> >> > 这个办法行不通 太麻烦, 那还像上面说的 使用一个全局hash 存储所有的文件名
>>> >> >
>>> >> > 或者你使用 use FileHandle; 肯定行。 这样文件句柄就是个hash了
>>> >> >
>>> >> > 在 2010年8月9日 下午1:39,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >> use strict ;
>>> >> >> use warnings ;
>>> >> >>
>>> >> >>
>>> >> >> open(my $h, "<test.dat");
>>> >> >>
>>> >> >> my %h ; 就行了,
>>> >> >> $h{name} = "test.dat";
>>> >> >>
>>> >> >>
>>> >> >> 不要紧,讨论问题么,吵架也正常,
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> 2010/8/9 snyh <snyh@snyh.org>
>>> >> >>>
>>> >> >>> 这个方式 是我错了。没测试就说了 没注意到申明问题
>>> >> >>> 以前都是对 "对象" 上面添加额外信息 想当然认为glob会自动转换。
>>> >> >>>
>>> >> >>> 影响您心情 对不住了
>>> >> >>> 我不该说那么多废话
>>> >> >>>
>>> >> >>> 在 2010年8月9日 下午1:28,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >>> > 咱就讨论个问题, 你哪来那么多话
>>> >> >>> >
>>> >> >>> > 就算你是绝顶高手, 也不能不允许别人鄙视吧,呵呵
>>> >> >>> >
>>> >> >>> > 你的代码:
>>> >> >>> >
>>> >> >>> > use strict ;
>>> >> >>> > use warnings ;
>>> >> >>> >
>>> >> >>> >
>>> >> >>> > open(my $h, "<test.dat");
>>> >> >>> > $h{name} = "test.dat";
>>> >> >>> > 有编译error,
>>> >> >>> >
>>> >> >>> > 你不会 不加 use strict /warnings 吧, 服了你了
>>> >> >>> >
>>> >> >>> >
>>> >> >>> >
>>> >> >>> > 2010/8/9 snyh <snyh@snyh.org>
>>> >> >>> >>
>>> >> >>> >> 把文件名存在文件句柄里面, 这样也是一一对应,并且存取的代价都可忽略不计,
>>> >> >>> >> 我当然知道您会, 只是这个方式您的语气似乎有些鄙视?
>>> >> >>> >> 这样也许会隐藏其他我没有想到的问题,
>>> >> >>> >> 反正为以前写perl-gtk的时候,都是把数据存在object里面,不使用GTK本身的user_data
>>> >> >>> >>
>>> >> >>> >> 如果不是使用filehandle 模块, 文件句柄是一个glob,
>>> >> >>> >> 你直接把它当作hash使用也行,自动创建了一个哈希(我想内存方面的问题,如果用perl,这点消耗完全没必要考虑)
>>> >> >>> >>
>>> >> >>> >> 我觉得有问题是,
>>> >> >>> >> "就是 我要打开的文件太多
>>> >> >>> >> 很多 file handle ,
>>> >> >>> >> 要回到很前面 才查到 打开哪个文件,如果 能从 handle直接 知道 就好了"
>>> >> >>> >> 既然 你能"回到很前面"(我想的是,前面代表代码前面)查到那个是那个文件。
>>> >> >>> >> 那你不知道那个handle是那个文件, 是不是你自己的代码组织有问题?
>>> >> >>> >> 文件再多能有多少? 不可能您的程序是万能程序,需要处理世界上所有的事情吧?
>>> >> >>> >> 程序只是关注一定范围的事情,
>>> >> >>> >> 哪个filehandle对应那个文件你自己都搞不清楚(或者说整理不清楚)你如何组织程序的主要逻辑?
>>> >> >>> >>
>>> >> >>> >> 我阅历有限,暂时能想到的只有一种情况,需要通过句柄知道文件名
>>> >> >>> >> --- 代码不是你一个人写的,在团队中,
>>> >> >>> >> 需要调用其他人的代码,所有不知道对应文件名很正常。不过调研代码都到了文件句柄这个层次,也有点太紧耦合了吧?
>>> >> >>> >>
>>> >> >>> >> 在 2010年8月9日 上午6:44,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >>> >> > 有啥问题
>>> >> >>> >> >
>>> >> >>> >> >
>>> >> >>> >> > 你这创建了 %h , 啊, 我也会啊
>>> >> >>> >> >
>>> >> >>> >> > 2010/8/8 snyh <snyh@snyh.org>
>>> >> >>> >> >>
>>> >> >>> >> >> open(my $h, "<test.dat");
>>> >> >>> >> >> $h{name} = "test.dat";
>>> >> >>> >> >>
>>> >> >>> >> >> 打开文件时,把文件名存在filehandle里面 也许比较适合
>>> >> >>> >> >>
>>> >> >>> >> >> 不过你这个需求,貌似有问题。。。
>>> >> >>> >> >> 在 2010年8月8日 上午7:44,Michael Zeng <galaxy2004@gmail.com> 写道:
>>> >> >>> >> >> > 就是 我要打开的文件太多
>>> >> >>> >> >> >
>>> >> >>> >> >> > 很多 file handle ,
>>> >> >>> >> >> >
>>> >> >>> >> >> > 要回到很前面 才查到 打开哪个文件,如果 能从 handle直接 知道 就好了
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> > 2010/8/8 Huangj <redspid@163.com>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 介个需求是如何产生的?
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> At 2010-08-05 22:30:08,"Michael Zeng"
>>> >> >>> >> >> >> <galaxy2004@gmail.com>
>>> >> >>> >> >> >> wrote:
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 就是
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> open my $F1, '<', 'ABC'
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> or open my $F2 , '>' , "DEF" ;
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 现在 拿到 $F1, $F2 , 如何返回文件的名称呢
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> 比如ABC , DEF
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> --
>>> >> >>> >> >> >> Yours Sincerely
>>> >> >>> >> >> >> Zeng Hong
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> --
>>> >> >>> >> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> >> 要取消订阅此网上论坛,请发送电子邮件至
>>> >> >>> >> >> >> perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> >> 若有更多问题,请通过
>>> >> >>> >> >> >> http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> >> 访问此网上论坛。
>>> >> >>> >> >> >>
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> ________________________________
>>> >> >>> >> >> >> 您想拥有和网易免费邮箱一样强大的软件吗?
>>> >> >>> >> >> >>
>>> >> >>> >> >> >> --
>>> >> >>> >> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> >> 要取消订阅此网上论坛,请发送电子邮件至
>>> >> >>> >> >> >> perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> >> 若有更多问题,请通过
>>> >> >>> >> >> >> http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> >> 访问此网上论坛。
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> >
>>> >> >>> >> >> > --
>>> >> >>> >> >> > Yours Sincerely
>>> >> >>> >> >> > Zeng Hong
>>> >> >>> >> >> >
>>> >> >>> >> >> > --
>>> >> >>> >> >> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> > 要取消订阅此网上论坛,请发送电子邮件至
>>> >> >>> >> >> > perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> > 若有更多问题,请通过
>>> >> >>> >> >> > http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> > 访问此网上论坛。
>>> >> >>> >> >> >
>>> >> >>> >> >>
>>> >> >>> >> >> --
>>> >> >>> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> >> 访问此网上论坛。
>>> >> >>> >> >>
>>> >> >>> >> >
>>> >> >>> >> >
>>> >> >>> >> >
>>> >> >>> >> > --
>>> >> >>> >> > Yours Sincerely
>>> >> >>> >> > Zeng Hong
>>> >> >>> >> >
>>> >> >>> >> > --
>>> >> >>> >> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> > 访问此网上论坛。
>>> >> >>> >> >
>>> >> >>> >>
>>> >> >>> >> --
>>> >> >>> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> >> 访问此网上论坛。
>>> >> >>> >>
>>> >> >>> >
>>> >> >>> >
>>> >> >>> >
>>> >> >>> > --
>>> >> >>> > Yours Sincerely
>>> >> >>> > Zeng Hong
>>> >> >>> >
>>> >> >>> > --
>>> >> >>> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> > 访问此网上论坛。
>>> >> >>> >
>>> >> >>>
>>> >> >>> --
>>> >> >>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >>> 访问此网上论坛。
>>> >> >>>
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> --
>>> >> >> Yours Sincerely
>>> >> >> Zeng Hong
>>> >> >>
>>> >> >> --
>>> >> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>> >> >> 访问此网上论坛。
>>> >> >>
>>> >> >
>>> >>
>>> >> --
>>> >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> >> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> >> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> >> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>> >>
>>> >
>>> >
>>> >
>>> > --
>>> > Yours Sincerely
>>> > Zeng Hong
>>> >
>>> > --
>>> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>> >
>>>
>>> --
>>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>>
>>
>>
>>
>> --
>> Yours Sincerely
>> Zeng Hong
>>
>> --
>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>

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