<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
_filtered {font-family:Tahoma;panose-1:2 11 6 4 3 5 4 4 2 4;}
_filtered {margin:1.0in 1.25in 1.0in 1.25in;}
/* Font Definitions */
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:blue;
        text-decoration:underline;}
code
        {font-family:"Courier New";}
span.emailstyle17
        {font-family:Arial;
        color:navy;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
-->
</style>
</head>
<body lang=EN-US link=blue vlink=blue>
<div class=Section1>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Brian – yep, I jumped in without any
context.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Tiger – the code below illustrates
the problem, and a solution. <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Firstly, note that the situation you are
encountering seems to match with the documentation, as correct and expected
behavior. Here is the URL to “perldoc.org”:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'> <a
href="http://perldoc.perl.org/functions/open.html">http://perldoc.perl.org/functions/open.html</a><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>And here is an excerpt from the first
paragraph:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal style='margin-left:.5in'><font size=2 color=navy face=Arial><span
style='font-size:10.0pt;font-family:Arial;color:navy'>. . .</span></font><font
size=2 color=navy><span style='font-size:11.0pt;color:navy'> </span></font><font
size=2><span style='font-size:11.0pt'>otherwise if FILEHANDLE is an expression,
its value is used as the name of the real filehandle wanted. (This is
considered a symbolic reference, so </span></font><u><font size=2
face="Courier New"><span style='font-size:11.0pt;font-family:"Courier New"'>use
<span class=w>strict</span><code><font face="Courier New"> </font></code><span
class=q>'refs'</span></span></font></u><font size=2><span style='font-size:
11.0pt'> should <i><span style='font-style:italic'>not</span></i> be in effect.)<font
color=navy><span style='color:navy'> </span></font></span></font><font size=2
color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Secondly, based on my tests just now, it
seems “strict” is making a special exception for file based
operations. That would explain why we routinely use a naked string in an
open, without getting it flagged. So, “strict” seems to make
an exception for:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'> </span></font><font
size=2 color=navy face="Courier New"><span style='font-size:10.0pt;font-family:
"Courier New";color:navy'>open FH, ‘someFile.txt”;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>In the sample code, the following is not
allowed by “strict”; I assume this illustrates the problem you are
having.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'> </span></font><font
size=2 color=navy face="Courier New"><span style='font-size:10.0pt;font-family:
"Courier New";color:navy'>myLog::open(FH2,’someFile.txt’);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>However, in the sample code, I was able to
alias the original symbol “open()” in “main”; in other
words, I aliased “main::open()”. In that case, “strict”
applies the (apparent) special handling.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal style='text-indent:.5in'><font size=2 color=navy
face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New";
color:navy'># Alias<o:p></o:p></span></font></p>
<p class=MsoNormal style='text-indent:.5in'><font size=2 color=navy
face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New";
color:navy'>*open = \&myLog::open;<o:p></o:p></span></font></p>
<p class=MsoNormal style='text-indent:.5in'><font size=2 color=navy
face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New";
color:navy'>open(FH3,’someFile.txt’);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>So, that is your solution.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Note – in the sample code you will
also see an attempt to use the “Exporter” module. That didn’t
work; it seems that “Exporter” also makes a special case of “open()”
– it refused to export it. (That code is commented out, the “__DATA__”
directive.)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Code appears below. Have fun.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Alexander Danel<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>#!/usr/bin/perl<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>my $fName =
"t.pl";<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>my $fMode =
"<";<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>package myLog;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>sub open{<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
use Cwd;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
my ($package, $file, $line_number) = caller();<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
my $fullpath = Cwd::abs_path($file);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
if ($_[0]) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
no strict 'refs';<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
CORE::open("::$_[0]", $_[1]) or die "Cannot open $_[1]:
$!\n";<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
} else {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
CORE::open($_[0], $_[1]) or die "Cannot open $_[1]: $!\n";<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>package main;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>use strict;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>open(FH1,"$fMode
$fName");<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>print "Here
is first line of FH1: ", scalar(<FH1>), "\n";<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>close(FH1);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'># Uncomment the
following code to see the problem -- "strict" will flag it.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>#myLog::open(FH2,"$fMode
$fName");<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>#print "Here
is first line of FH2: ", scalar(<FH2>), "\n";<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>#close(FH2);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'># Alias<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>*open =
\&myLog::open;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>open(FH3,"$fMode
$fName");<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>print "Here
is first line of FH3: ", scalar(<FH3>), "\n";<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>close(FH3);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>__DATA__<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>package
myLogExported;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>use Exporter
'open()' ;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>sub open{<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
use Cwd;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
my ($package, $file, $line_number) = caller();<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
my $fullpath = Cwd::abs_path($file);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
if ($_[0]) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
#no strict 'refs';<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
CORE::open("::$_[0]", $_[1]) or die "Cannot open $_[1]:
$!\n";<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
} else {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
CORE::open($_[0], $_[1]) or die "Cannot open $_[1]: $!\n";<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>package main;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>use strict;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>open(FH4,"$fMode
$fName");<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>print "Here
is first line of FH4: ", scalar(<FH4>), "\n";<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:navy'>close(FH4);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<div>
<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>
<hr size=2 width="100%" align=center tabindex=-1>
</span></font></div>
<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
chicago-talk-bounces+danel=speakeasy.net@pm.org
[mailto:chicago-talk-bounces+danel=speakeasy.net@pm.org] <b><span
style='font-weight:bold'>On Behalf Of </span></b>tiger peng<br>
<b><span style='font-weight:bold'>Sent:</span></b> Monday, October 25, 2010
2:30 PM<br>
<b><span style='font-weight:bold'>To:</span></b> <st1:PersonName w:st="on">Chicago.pm
chatter</st1:PersonName><br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [Chicago-talk]
logging in and out files</span></font><o:p></o:p></p>
</div>
<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p> </o:p></span></font></p>
<div>
<div>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'>Alex,<br>
<br>
I am trying create a module, say myLog.pm, to override the built-in open
function, adding auxiliary abilities (logging the file access information). <br>
I am looking for minor modification, adding one line "</span></font><font
size=2 face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New"'>use
myLog 'open';'</span></font><font size=2 face=Arial><span style='font-size:
10.0pt;font-family:Arial'> in a hundreds of scripts. The developing module
works for the scripts without using typeglob filehandle (open FH, $filename);
if no using "use stricts", it also works for the typeglob filehandle.<br>
<br>
It seems after overriding, the compiler take the 'FH' in the open function as
calling a subroutine. <br>
<br>
<br>
Tiger,<o:p></o:p></span></font></p>
</div>
<div>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<div>
<div class=MsoNormal align=center style='text-align:center'><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
<hr size=1 width="100%" align=center>
</span></font></div>
<p class=MsoNormal style='margin-bottom:12.0pt'><b><font size=2 face=Tahoma><span
style='font-size:10.0pt;font-family:Tahoma;font-weight:bold'>From:</span></font></b><font
size=2 face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'> Alexander
Danel <danel@speakeasy.net><br>
<b><span style='font-weight:bold'>To:</span></b> <st1:PersonName w:st="on">Chicago.pm
chatter</st1:PersonName> <chicago-talk@pm.org><br>
<b><span style='font-weight:bold'>Sent:</span></b> Mon, October 25, 2010
3:10:10 PM<br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [Chicago-talk]
logging in and out files</span></font><o:p></o:p></p>
<div>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Tiger,</span></font><o:p></o:p></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'> </span></font><o:p></o:p></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Firstly, I noticed you named your function
“open()” – I wouldn’t use that name, it is the name of
a Perl operator; In fact, you use Perl “open()” within your
“open()”.</span></font><o:p></o:p></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'> </span></font><o:p></o:p></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Secondly, the error message might be
indicating a simple syntax error in preceding code. Look for a missing
semi-colon, etc., in the code just before the error.</span></font><o:p></o:p></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'> </span></font><o:p></o:p></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Alexander Danel</span></font><o:p></o:p></p>
<div>
<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>
<hr size=2 width="100%" align=center tabindex=-1>
</span></font></div>
<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
chicago-talk-bounces+danel=speakeasy.net@pm.org
[mailto:chicago-talk-bounces+danel=speakeasy.net@pm.org] <b><span
style='font-weight:bold'>On Behalf Of </span></b>tiger peng<br>
<b><span style='font-weight:bold'>Sent:</span></b> Monday, October 25, 2010
12:24 PM<br>
<b><span style='font-weight:bold'>To:</span></b> <a href="http://Chicago.pm"
target="_blank">Chicago.pm</a> chatter<br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [Chicago-talk]
logging in and out files</span></font><o:p></o:p></p>
</div>
<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'> <o:p></o:p></span></font></p>
<div>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'>Weird, when I tested the module, with </span></font><font
size=2 face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New"'>open
FH, $filename; </span></font><font size=2 face=Arial><span style='font-size:
10.0pt;font-family:Arial'>with </span></font><font size=2 face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New"'>use strict; It complain with
message: Bareword "FH" not allowed while "<span
style='background-attachment:scroll;background-position-x:0%;background-position-y:
0%'><span style='background:yellow'>strict subs</span></span>" in
use... </span></font><o:p></o:p></p>
<div>
<p class=MsoNormal><font size=2 face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New"'> </span></font><o:p></o:p></p>
</div>
<div>
<p class=MsoNormal><font size=2 face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New"'> </span></font><o:p></o:p></p>
<div>
<div class=MsoNormal align=center style='text-align:center'><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
<hr size=1 width="100%" align=center>
</span></font></div>
<p class=MsoNormal style='margin-bottom:12.0pt'><b><font size=2 face=Tahoma><span
style='font-size:10.0pt;font-family:Tahoma;font-weight:bold'>From:</span></font></b><font
size=2 face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'> tiger
peng <tigerpeng2001@yahoo.com><br>
<b><span style='font-weight:bold'>To:</span></b> <st1:PersonName w:st="on">Chicago.pm
chatter</st1:PersonName> <chicago-talk@pm.org><br>
<b><span style='font-weight:bold'>Sent:</span></b> Fri, October 22, 2010
2:11:07 PM<br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [Chicago-talk]
logging in and out files</span></font><o:p></o:p></p>
<div>
<div>
<p class=MsoNormal style='margin-bottom:12.0pt'><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>I tried out a working version below.
It works for $FH and FH, but not clear why.<br>
<br>
</span></font><font size=2 face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New"'>sub open{<br>
my ($package, $file, $line_number) = caller();<br>
my $fullpath = Cwd::abs_path($file);<br>
my $host = hostname();<br>
_open_log({host=>hostname(),<br>
script=>Cwd::abs_path($file),<br>
file=>$_[1],<br>
}<br>
);<br>
if ($_[0]) {<br>
no strict 'refs';<br>
CORE::open("::$_[0]", $_[1]) or die
"Cannot open $_[1]: $!\n";<br>
} else {<br>
CORE::open($_[0], $_[1]) or die "Cannot
open $_[1]: $!\n";<br>
}<br>
}</span></font><o:p></o:p></p>
</div>
<div>
<p class=MsoNormal><font size=2 face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New"'> </span></font><o:p></o:p></p>
<div>
<div class=MsoNormal align=center style='text-align:center'><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
<hr size=1 width="100%" align=center>
</span></font></div>
<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'> imran javaid
<imranjj@gmail.com><br>
<b><span style='font-weight:bold'>To:</span></b> <a href="http://Chicago.pm"
target="_blank">Chicago.pm</a> chatter <chicago-talk@pm.org><br>
<b><span style='font-weight:bold'>Sent:</span></b> Thu, October 21, 2010
2:46:29 PM<br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [Chicago-talk]
logging in and out files<br>
</span></font><font size=2 face=Arial><span style='font-size:10.0pt;font-family:
Arial'><br>
This might get you somewhere:<br>
<br>
use strict;<br>
use Symbol;<br>
<br>
sub myopen {<br>
if (ref(\$_[0]) eq 'SCALAR') {<br>
open ($_[0], $_[1]);<br>
} else {<br>
my $in = qualify_to_ref($_[0]);<br>
open($in, $_[1]);<br>
}<br>
}<br>
<br>
myopen(*FILE, ">file.txt") or die $!;<br>
print FILE "testing\n";<br>
myopen(my $FILE2, ">file2.txt") or die $!;<br>
print $FILE2 "testing2\n";<br>
<br>
If you remove "use strict;" then you can replace "*FILE"
with "FILE",<br>
but can and should are not the same thing.<br>
<br>
-imran<br>
<br>
On Thu, Oct 21, 2010 at 12:34 PM, tiger peng <<a
href="mailto:tigerpeng2001@yahoo.com" target="_blank"
ymailto="mailto:tigerpeng2001@yahoo.com">tigerpeng2001@yahoo.com</a>> wrote:<br>
> Thanks, it looks a good tool and I will try it later.<br>
><br>
> But my problem now is how to pass in and back the FH.<br>
><br>
> It complains with error message:<br>
> Can't use string ("FH") as a symbol ref while "strict
refs" in use at<br>
> /my/lib/myLogger.pm ...<br>
><br>
> When I let it do not complain with "no strict 'refs';", it does
not complain<br>
> but FH seems not opened or not passed back, as the caller read nothing
out.<br>
><br>
> ________________________________<br>
> From: Joshua <<a href="mailto:joshua.mcadams@gmail.com" target="_blank"
ymailto="mailto:joshua.mcadams@gmail.com">joshua.mcadams@gmail.com</a>><br>
> To: <a href="http://Chicago.pm" target="_blank">Chicago.pm</a> chatter <<a
href="mailto:chicago-talk@pm.org" target="_blank"
ymailto="mailto:chicago-talk@pm.org">chicago-talk@pm.org</a>><br>
> Sent: Wed, October 20, 2010 3:29:53 PM<br>
> Subject: Re: [Chicago-talk] logging in and out files<br>
><br>
> I haven't done this myself before, but it looks like some folks have<br>
> and have put their work on CPAN:<br>
> <a href="http://search.cpan.org/%7Ecwest/ex-override-1.1/override.pm"
target="_blank">http://search.cpan.org/%7Ecwest/ex-override-1.1/override.pm</a><br>
><br>
> On Wed, Oct 20, 2010 at 9:55 AM, tiger peng <<a
href="mailto:tigerpeng2001@yahoo.com" target="_blank"
ymailto="mailto:tigerpeng2001@yahoo.com">tigerpeng2001@yahoo.com</a>> wrote:<br>
>> I wrapped the open as below, and it works for the open $fh, $file but
not<br>
>> open FH, $file.<br>
>><br>
>> As I need to apply the wrapping open function to lots of old script, I<br>
>> prefer only add one line: use myLoger 'open'; into the scripts<br>
>><br>
>> Is there any suggestion?<br>
>><br>
>> sub open{<br>
>> my ($package, $file, $line_number) = caller();<br>
>> my $fullpath = Cwd::abs_path($file);<br>
>> my $host = hostname();<br>
>> _open_log({host=>hostname(),<br>
>>
script=>Cwd::abs_path($file),<br>
>>
file=>$_[1],<br>
>>
}<br>
>>
);<br>
>> CORE::open(shift, shift) or die "Cannot open :
$!\n";<br>
>> }<br>
>><br>
>> sub _open_log {<br>
>> ...<br>
>> }<br>
>><br>
>><br>
>> ________________________________<br>
>> From: tiger peng <<a href="mailto:tigerpeng2001@yahoo.com"
target="_blank" ymailto="mailto:tigerpeng2001@yahoo.com">tigerpeng2001@yahoo.com</a>><br>
>> To: <st1:PersonName w:st="on">Chicago.pm chatter</st1:PersonName> <<a
href="mailto:chicago-talk@pm.org" target="_blank"
ymailto="mailto:chicago-talk@pm.org">chicago-talk@pm.org</a>><br>
>> Sent: Tue, October 19, 2010 11:41:10 AM<br>
>> Subject: [Chicago-talk] logging in and out files<br>
>><br>
>> Hello all,<br>
>><br>
>> Does anyone have the experience on tracing input/output files used by
Perl<br>
>> script?<br>
>><br>
>> I am think if there is anyway to over write the build-in open
function, so<br>
>> the new open function can log the file name, IO type (R, W, or RW), as<br>
>> well<br>
>> as the open/close timestamp. Any suggestion is highly appreciated.<br>
>><br>
>> Thanks,<br>
>> Tiger<br>
>><br>
>> _______________________________________________<br>
>> Chicago-talk mailing list<br>
>> <a href="mailto:Chicago-talk@pm.org" target="_blank"
ymailto="mailto:Chicago-talk@pm.org">Chicago-talk@pm.org</a><br>
>> <a href="http://mail.pm.org/mailman/listinfo/chicago-talk"
target="_blank">http://mail.pm.org/mailman/listinfo/chicago-talk</a><br>
>><br>
> _______________________________________________<br>
> Chicago-talk mailing list<br>
> <a href="mailto:Chicago-talk@pm.org" target="_blank"
ymailto="mailto:Chicago-talk@pm.org">Chicago-talk@pm.org</a><br>
> <a href="http://mail.pm.org/mailman/listinfo/chicago-talk" target="_blank">http://mail.pm.org/mailman/listinfo/chicago-talk</a><br>
><br>
> _______________________________________________<br>
> Chicago-talk mailing list<br>
> <a href="mailto:Chicago-talk@pm.org" target="_blank"
ymailto="mailto:Chicago-talk@pm.org">Chicago-talk@pm.org</a><br>
> <a href="http://mail.pm.org/mailman/listinfo/chicago-talk" target="_blank">http://mail.pm.org/mailman/listinfo/chicago-talk</a><br>
><br>
_______________________________________________<br>
Chicago-talk mailing list<br>
<a href="mailto:Chicago-talk@pm.org" target="_blank"
ymailto="mailto:Chicago-talk@pm.org">Chicago-talk@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/chicago-talk" target="_blank">http://mail.pm.org/mailman/listinfo/chicago-talk</a></span></font><o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>