[30491] in Perl-Users-Digest
Perl-Users Digest, Issue: 1734 Volume: 11
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Sun Jul 20 14:09:45 2008
Date: Sun, 20 Jul 2008 11:09:09 -0700 (PDT)
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)
Perl-Users Digest Sun, 20 Jul 2008 Volume: 11 Number: 1734
Today's topics:
Re: C linked lists in Perl <jurgenex@hotmail.com>
comma puzzle <nick@maproom.co.uk>
Re: comma puzzle <fawaka@gmail.com>
Re: comma puzzle <tadmc@seesig.invalid>
Re: comma puzzle <jurgenex@hotmail.com>
Re: comma puzzle <spamtrap@dot-app.org>
how to change the effective UID <rtfm.rtfm.rtfm@gmail.com>
Re: how to change the effective UID <fawaka@gmail.com>
Re: how to change the effective user identficator <jurgenex@hotmail.com>
Re: How to identify a 32 or 64 bit OS? <sisyphus359@gmail.com>
new CPAN modules on Sun Jul 20 2008 (Randal Schwartz)
sha1 -- core <vikimun@gmail.com>
Re: The Importance of Terminology's Quality (Robert Maas, http://tinyurl.com/uh3t)
Re: understading double scalar variable $$ (aka ? the Platypus)
Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: Sat, 19 Jul 2008 23:30:46 GMT
From: Jürgen Exner <jurgenex@hotmail.com>
Subject: Re: C linked lists in Perl
Message-Id: <7kt484phh8t4ldmb56fl8v01kaiak6p0rj@4ax.com>
sln@netherlands.com wrote:
>A linked list element is a Node, commonly containing a Header, that
>points to the previous and next header.
For a double-linked list, yes. But there are also single-linked list
which are missing the 'previous' link.
>Within the node, below the header, contains data.
>
>What on earth could that be used for, and why on earth would you
>need to code that?
>Why would you need a linked list at all, in any language?
Whenever you need a sequence of data elements a linked list is one
possible implementation. As others have pointed out in Perl you would
usually prefer an array.
However if your programming language does not support dynamically
growing and shrinking arrays as well as efficient insertion and deletion
in the middle of an array then those are out of the question and you
have no choice but to use a linked list.
Not to mention that a single-linked list is the most simple dynamic data
type and therefore is often used as the first step to introduce more
complex data types like trees and graphs.
jue
------------------------------
Date: Sun, 20 Jul 2008 11:22:04 +0100
From: Nick Wedd <nick@maproom.co.uk>
Subject: comma puzzle
Message-Id: <vg9$0diMHxgIFAcH@maproom.demon.co.uk>
If I do
for ( my $i=0 ; $i<10 ; $i++ ) { print $i; }
it writes "0123456789". Fine.
Now if I accidentally write
for ( my $i=0 , $i<10 , $i++ ) { print $i; }
it writes "111". Why? I understand that $i will have the value 1 when
I print it. But why does it go round the loop _three_ times then exit?
Nick
--
Nick Wedd nick@maproom.co.uk
------------------------------
Date: 20 Jul 2008 10:41:42 GMT
From: Leon Timmermans <fawaka@gmail.com>
Subject: Re: comma puzzle
Message-Id: <pan.2008.07.20.10.42.10@gmail.com>
On Sun, 20 Jul 2008 11:22:04 +0100, Nick Wedd wrote:
> If I do
> for ( my $i=0 ; $i<10 ; $i++ ) { print $i; }
> it writes "0123456789". Fine.
>
> Now if I accidentally write
> for ( my $i=0 , $i<10 , $i++ ) { print $i; }
> it writes "111". Why? I understand that $i will have the value 1 when
> I print it. But why does it go round the loop _three_ times then exit?
>
> Nick
Your code is equivalent to
my @array = ( my $i=0 , $i<10 , $i++ );
for(@array) { print $i }
I think that makes it obvious why it does what it does ;-).
Leon Timmermans
------------------------------
Date: Sun, 20 Jul 2008 09:14:32 -0500
From: Tad J McClellan <tadmc@seesig.invalid>
Subject: Re: comma puzzle
Message-Id: <slrng86i28.chm.tadmc@tadmc30.sbcglobal.net>
Nick Wedd <nick@maproom.co.uk> wrote:
> If I do
> for ( my $i=0 ; $i<10 ; $i++ ) { print $i; }
> it writes "0123456789". Fine.
That uses the control structure described in the "For Loops"
section of perlsyn.pod.
> Now if I accidentally write
> for ( my $i=0 , $i<10 , $i++ ) { print $i; }
That uses the control structure described in the "Foreach Loops"
section of perlsyn.pod.
Since you did not provide a loop control variable, the foreach will
place each list item into $_.
But you never output $_.
> it writes "111".
it outputs "000" when I run it:
perl -e 'for ( my $i=0 , $i<10 , $i++ ) { print $i; }'
> Why?
I do not know why it would output "111", since I cannot make perl do that...
Unless your code was:
perl -e 'for ( my $i=1 , $i<10 , $i++ ) { print $i; }'
...?
> I understand that $i will have the value 1 when
> I print it.
There are *two* variables named $i in your code.
"my $i=1" and "print $i" refer to the lexical variable named $i.
"$i<10" and "$i++" refer to the package variable named $i (ie. $main::i).
perl -MO=Deparse -e 'for ( my $i=0 , $i<10 , $i++ ) { print $i; }'
foreach $_ (my $i = 0, $main::i < 10, $main::i++) {
print $i;
}
> But why does it go round the loop _three_ times then exit?
If you supply a 3-element list to the foreach loop,
then it will iterate 3 times.
--
Tad McClellan
email: perl -le "print scalar reverse qq/moc.noitatibaher\100cmdat/"
------------------------------
Date: Sun, 20 Jul 2008 15:36:36 GMT
From: Jürgen Exner <jurgenex@hotmail.com>
Subject: Re: comma puzzle
Message-Id: <hmm684tr1tab139knt6j0lpu0qcgrk6lbm@4ax.com>
Nick Wedd <nick@maproom.co.uk> wrote:
>If I do
> for ( my $i=0 ; $i<10 ; $i++ ) { print $i; }
>it writes "0123456789". Fine.
>
>Now if I accidentally write
> for ( my $i=0 , $i<10 , $i++ ) { print $i; }
>it writes "111". Why? I understand that $i will have the value 1 when
>I print it. But why does it go round the loop _three_ times then exit?
Yes, it does. Because the list (my $i=0 , $i<10 , $i++) contains three
elements. Try
for ( my $i=0 , $i<10 , $i++, 'foo', 'bar' ) { print $i; }
with five elements and it becomes obvious immediately.
jue
------------------------------
Date: Sun, 20 Jul 2008 14:05:39 -0400
From: Sherman Pendley <spamtrap@dot-app.org>
Subject: Re: comma puzzle
Message-Id: <m1vdz04ej0.fsf@dot-app.org>
Leon Timmermans <fawaka@gmail.com> writes:
> On Sun, 20 Jul 2008 11:22:04 +0100, Nick Wedd wrote:
>
>> If I do
>> for ( my $i=0 ; $i<10 ; $i++ ) { print $i; }
>> it writes "0123456789". Fine.
>>
>> Now if I accidentally write
>> for ( my $i=0 , $i<10 , $i++ ) { print $i; }
>> it writes "111". Why? I understand that $i will have the value 1 when
>> I print it. But why does it go round the loop _three_ times then exit?
>>
>> Nick
>
> Your code is equivalent to
> my @array = ( my $i=0 , $i<10 , $i++ );
> for(@array) { print $i }
>
> I think that makes it obvious why it does what it does ;-).
Obviousness is why I write C-style loops using for(), and Perl-style
with foreach(). They're synonyms, as far as Perl itself cares, and the
difference in keywords makes them more visually distinctive from one
another.
sherm--
--
My blog: http://shermspace.blogspot.com
Cocoa programming in Perl: http://camelbones.sourceforge.net
------------------------------
Date: Sun, 20 Jul 2008 19:07:29 +0400
From: Daneel Yaitskov <rtfm.rtfm.rtfm@gmail.com>
Subject: how to change the effective UID
Message-Id: <g5vkdo$tl8$2@aioe.org>
Hi,
I can't change the EUID of a perl process which performs a perl script.
I used the manual perlsec and wrote the script:
#!/usr/bin/perl
use English;
$EUID = 0;
open(THEFILE, ">/var/log/messages") || die "can't open file";
print "The file was opened\n";
#end of the script
The script file has the rights:
$chown root:root test.pl
$chmod a+xs test.pl
The script gives the error "can't open file"
Daneel
------------------------------
Date: 20 Jul 2008 17:11:20 GMT
From: Leon Timmermans <fawaka@gmail.com>
Subject: Re: how to change the effective UID
Message-Id: <pan.2008.07.20.17.11.49@gmail.com>
On Sun, 20 Jul 2008 19:07:29 +0400, Daneel Yaitskov wrote:
> Hi,
>
>
> I can't change the EUID of a perl process which performs a perl script.
> I used the manual perlsec and wrote the script:
>
> #!/usr/bin/perl
> use English;
>
> $EUID = 0;
After setting $EUID, you should always check $! (also known as $ERRNO
when using English) for errors. What does it say?
> open(THEFILE, ">/var/log/messages") || die "can't open file"; print "The
> file was opened\n";
Here again, you should always include $! in the error string. It will
tell you why it couldn open the file.
Regards,
Leon Timmermans
------------------------------
Date: Sun, 20 Jul 2008 15:43:01 GMT
From: Jürgen Exner <jurgenex@hotmail.com>
Subject: Re: how to change the effective user identficator
Message-Id: <l5n684dp421sg6dc5pc5on2ik55jt1bdnr@4ax.com>
[Forwarding to CLPM because CLP is obsolete]
Daneel Yaitskov <rtfm.rtfm.rtfm@gmail.com> wrote:
>I can't change the EUID of a perl process which performs a perl script.
>I used the manual perlsec and wrote the script:
>
>#!/usr/bin/perl
>
>use English '-no_match_vars';
>
>$EUID = 0;
>open(THEFILE, ">/var/log/messages") || die "can't open file";
>print "The file was opened\n";
>#end of the script
>
>The script file has the rights:
>$chown root:root test.pl
>$chmod a+xs test.pl
>The script gives the error "can't open file"
>
>
>Daneel
------------------------------
Date: Sun, 20 Jul 2008 06:05:56 -0700 (PDT)
From: sisyphus <sisyphus359@gmail.com>
Subject: Re: How to identify a 32 or 64 bit OS?
Message-Id: <6de96735-4e00-43e3-8433-02f8c9d0651b@v21g2000pro.googlegroups.com>
On Jul 19, 8:07=A0pm, Ilya Zakharevich <nospam-ab...@ilyaz.org> wrote:
=2E
=2E
>
> No, (without my patches) quad operations do not work in Perl even if
> it has 64bit integer support. =A0They work only if perl uses 64bit
> integers for its "integer slots".
Which, I envisage, is what Ben Morrow was getting at when he said "It
can, you just need to build perl correctly".
Is it correct to paraphrase that second sentence of Ilya's that I've
quoted as:
"They work only if $Config{ivsize} =3D=3D 8"
I would think that's correct ... but I'm not a lawyer.
Anyway, if those are the conditions for quad operations working, then
it seems to me that Ilya's patches (or equivalent) have already been
implemented - since, on a 32-bit OS (linux), I can 'pack "q", 1;' iff
$Config{ivsize} =3D=3D 8.
And even if $Config{d_longlong} eq 'define', I find that quad
operations will not work unless $Config{ivsize} =3D=3D 8.
I gather Ted's argument would be that quad operations should work if
*either* $Config{d_longlong} eq 'define' *or* $Config{ivsize} =3D=3D 8.
As an aside, on the only 64-bit perl (ActivePerl) that I have on Win32
(Vista 64), $Config{d_longlong} eq 'undef', $Config{use64bitint} eq
'define', $Config{ivsize} =3D=3D 8, and quad operations work fine. (This
is just meant to demonstrate that the value of $Config{d_longlong}
ought not be the *sole* consideration - but everyone probably knew
that, anyway :-)
Cheers,
Rob
------------------------------
Date: Sun, 20 Jul 2008 04:42:20 GMT
From: merlyn@stonehenge.com (Randal Schwartz)
Subject: new CPAN modules on Sun Jul 20 2008
Message-Id: <K4AFqK.1tHG@zorch.sf-bay.org>
The following modules have recently been added to or updated in the
Comprehensive Perl Archive Network (CPAN). You can install them using the
instructions in the 'perlmodinstall' page included with your Perl
distribution.
CatalystX-ListFramework-Builder-0.07
http://search.cpan.org/~oliver/CatalystX-ListFramework-Builder-0.07/
Instant AJAX web front-end for DBIx::Class, using Catalyst
----
DBIx-Class-InflateColumn-Path-Class-0.001000
http://search.cpan.org/~groditi/DBIx-Class-InflateColumn-Path-Class-0.001000/
----
Data-Visitor-0.16
http://search.cpan.org/~nuffin/Data-Visitor-0.16/
Visitor style traversal of Perl data structures
----
Data-Visitor-0.17
http://search.cpan.org/~nuffin/Data-Visitor-0.17/
Visitor style traversal of Perl data structures
----
Error-0.17015
http://search.cpan.org/~shlomif/Error-0.17015/
Error/exception handling in an OO-ish way
----
File-ExtAttr-1.08
http://search.cpan.org/~richdawe/File-ExtAttr-1.08/
Perl extension for accessing extended attributes of files
----
HTML-FillInForm-Lite-1.02
http://search.cpan.org/~gfuji/HTML-FillInForm-Lite-1.02/
Fills in HTML forms with data
----
JSON-XS-2.222
http://search.cpan.org/~mlehmann/JSON-XS-2.222/
JSON serialising/deserialising, done correctly and fast
----
Mac-PropertyList-SAX-0.80
http://search.cpan.org/~kulp/Mac-PropertyList-SAX-0.80/
work with Mac plists at a low level, fast
----
Mac-PropertyList-SAX-0.81
http://search.cpan.org/~kulp/Mac-PropertyList-SAX-0.81/
work with Mac plists at a low level, fast
----
MojoMojo-0.999019
http://search.cpan.org/~mramberg/MojoMojo-0.999019/
A Catalyst & DBIx::Class powered Wiki.
----
Net-Dopplr-0.7
http://search.cpan.org/~simonw/Net-Dopplr-0.7/
interface with Dopplr.com's web service
----
Net-FriendFeed-0.91
http://search.cpan.org/~kappa/Net-FriendFeed-0.91/
Perl interface to FriendFeed.com API
----
POE-Component-PluginManager-0.62
http://search.cpan.org/~whoppix/POE-Component-PluginManager-0.62/
Make your POE programs plugin capable, really easy!
----
POE-XS-Loop-Poll-0.006
http://search.cpan.org/~tonyc/POE-XS-Loop-Poll-0.006/
an XS implementation of POE::Loop, using poll(2).
----
Pod-Server-1.05
http://search.cpan.org/~beppu/Pod-Server-1.05/
a web server for locally installed perl documentation
----
SVN-Notify-Filter-AuthZMail-1.01
http://search.cpan.org/~borlik/SVN-Notify-Filter-AuthZMail-1.01/
Determines Subversion accounts to receive the email, via the AuthZSVNAccess file
----
SVN-Notify-Filter-EmailFlatFileDB-1.01
http://search.cpan.org/~borlik/SVN-Notify-Filter-EmailFlatFileDB-1.01/
Converts account names to email address based on a flat-file database
----
Set-Object-1.24
http://search.cpan.org/~samv/Set-Object-1.24/
set of objects and strings
----
SmartMatch-Sugar-0.03
http://search.cpan.org/~nuffin/SmartMatch-Sugar-0.03/
Smart match friendly tests.
----
Spreadsheet-WriteExcel-2.22
http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel-2.22/
Write to a cross-platform Excel binary file.
----
TAP-Harness-Archive-0.11
http://search.cpan.org/~wonko/TAP-Harness-Archive-0.11/
Create an archive of TAP test results
----
mpp-4
http://search.cpan.org/~pfeiffer/mpp-4/
----
mpp4
http://search.cpan.org/~pfeiffer/mpp4/
----
re-engine-Lua-0.02
http://search.cpan.org/~perrad/re-engine-Lua-0.02/
Lua regular expression engine
----
version-0.76
http://search.cpan.org/~jpeacock/version-0.76/
Perl extension for Version Objects
If you're an author of one of these modules, please submit a detailed
announcement to comp.lang.perl.announce, and we'll pass it along.
This message was generated by a Perl program described in my Linux
Magazine column, which can be found on-line (along with more than
200 other freely available past column articles) at
http://www.stonehenge.com/merlyn/LinuxMag/col82.html
print "Just another Perl hacker," # the original
--
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Smalltalk/Perl/Unix consulting, Technical writing, Comedy, etc. etc.
See http://methodsandmessages.vox.com/ for Smalltalk and Seaside discussion
------------------------------
Date: Sun, 20 Jul 2008 07:41:13 -0700 (PDT)
From: viki <vikimun@gmail.com>
Subject: sha1 -- core
Message-Id: <71694e87-cd99-4271-a53b-4a06ceb358bd@59g2000hsb.googlegroups.com>
Is there decent digest (like sha1) in core perl ? Can par embed
modules that have .c components ?
THanks
Viki
------------------------------
Date: Sun, 20 Jul 2008 10:36:21 -0700
From: jaycx2.3.calrobert@spamgourmet.com.remove (Robert Maas, http://tinyurl.com/uh3t)
Subject: Re: The Importance of Terminology's Quality
Message-Id: <rem-2008jul20-005@yahoo.com>
> >> ... the "thunks" were necessary at the machine-language level to
> >> /implement/ ALGOL 60, but they could not be expressed /in/ ALGOL.
> > Ah, thanks for the clarification. Is that info in the appropriate
> > WikiPedia page? If not, maybe you would edit it in?
> From: John W Kennedy <jwke...@attglobal.net>
> It is explained s.v. "thunk", which is referenced from "ALGOL
> 60". The ALGOL "pass-by-name" argument/parameter matching was
> perhaps the most extreme example ever of a language feature that
> was "elegant" but insane. What it meant, in effect, was that,
> unless otherwise marked, every argument was passed as two closures,
> one that returned a fresh evaluation of the expression given as the
> argument, which was called every time the parameter was read, and
> one that set the argument to a new value, which was called every
> time the parameter was set.
Wow! All these years when I occasionally heard of a "thunk" I never
was told, until now, what it really meant. Thanks for the info!!
Followup question #1: I assume these are lexical closures in the
environment of the point of the call, right?
Followup question #2: For simple arithmetic expressions, I can
possibly understand how the UPDATE closure might be implemeted
(expressed in Lisp to make the intent clear):
Call form: MyFunction(X+2);
GET closure: (+ closedX 2)
UPDATE closure: (lambda (newval) (setf closedX (- newval 2))
Thus from inside MyFunction where formal parameter Arg1 is bound
to actual parameter X+2, after doing Arg1 := 7; X will have the
value 5 so that calling Arg1 will return 7 as expected, right?
But if the actual argument is something complicated, especially if
it makes a nested function call, how can that possibly be
implemented? Given an arbitrary expression that calls some external
function, how can assigning a value to that expression make
sufficient changes in the runtime environment such that
subsequently evaluating that expression will yield the expected
value i.e. the value that had been assigned?
Or is the default of passing two closures (GET and UPDATE) *only*
if the actual-argument expression is simple enough that it's
invertible, and in complicated cases only a GET closure is passed
(or the UPDATE closure is simply a signal of a runtime error
that you're not allowed to assign a value to a complicated expression)?
IMO the "right" way to pass parameters that can be modified is to
use "locatatives" as in the Lisp Machine. That converts the idea of
a "place" (as used by SETF in Common Lisp) into a "first class
citizen" which can be passed around and stored etc., compared to a
SETF place which is merely a compiletime-macro trick to convert
place-references in source code into direct calls to the
appropriate accessor just above the place followed by specialized
SETter call to do the act. A hack to emulate a locative in CL would
be to pass a closure where the code to find the object directly
containing the place, and any parameters needed to find that place,
and the function needed to perform the act. Then the called
function would need to know it's going to get such a thunk-like
closure, but since it's expecting to modify one of its parameters
anyway, that's reasonable. Sketch of implementation (two special cases):
(defun make-thunk-cadr (topptr)
(let* ((midptr (cdr topptr))
(getclo (make-getter-closure :PARENT midptr :GETTERFN #'car
:PARMS nil))
(setclo (make-setter-closure :PARENT midptr :SETTERFN #'rplaca
:PARMS nil)))
(make-thunk getclo setclo))
(defun make-thunk-aref1 (topptr arrindex1)
(let ((getclo (make-getter-closure :PARENT topptr :GETTERFN #'aref1
:PARMS (list arrindex1)))
(setclo (make-setter-closure :PARENT midptr :SETTERFN #'setaref1
:PARMS (list arrindex1))))
(make-thunk getclo setclo))
(defun swap (thunk1 thunk2)
(prog (tmp)
(setq tmp (thunk-get thunk1))
(thunk-set thunk1 (thunk-get thunk2))
(thunk-set thunk2 tmp)))
;Definitions of make-getter-closure make-setter-closure make-thunk
; thunk-get thunk-set not shown because they depend on whether
; closures and thunks are implemented via tagged assoc lists or
; DEFSTRUCT structures or CLOS objects or whatever. But I made the
; call to the constructors explicit enough that it should be obvious
; what components are inside each type of object. Note that with
; CLOS objects, this could all be condensed to have a single CLOS
; object which is the thunk which has two methods GET and SET, no
; need to make closures for get and set separately, templates for
; those closures are made automatically when the CLOS class is
; defined, and closures are generated from those templates whenever
; a new CLOS thunk-object is made. Thus:
; ... (make-CLOS-thunk :PARENT topptr :GETTERFN #'aref1 :SETTERFN #'setaref1
; :PARMS (list arrindex1)) ...
;Example that should actually work:
(format t " arr: ~S~% ixs: ~S~%" arr ixs)
arr: #'(3 5 7 11 13))
ixs: (2 4)
(setq arr #'(3 5 7 11 13))
(setq ixs (list 2 4))
(setq thunkcadr (make-thunk-cadr ixs))
;Locative to the 4 in ixs
(setq thunkaref (make-thunk-aref1 arr (thunk-get thunkcadr)))
;Locative to the 11 in the array
(swap thunkcadr thunkaref)
(format t " arr: ~S~% ixs: ~S~%" arr ixs)
arr: #'(3 5 7 4 13))
ixs: (2 11)
I haven't implemented this. I'm just specifying what the behaviour should be
and giving a sketch how it ought to be easily doable in Common Lisp.
And I'm not going to implement it because I have no use for this way
of coding, at least not currently or in the foreseeable future.
<tmi> Generally my abstract data type is at a higher level where the
caller doesn't know that a single place is going to need to be
SETFed, so there's no point in getting a locative to work with.
Instead there's some *kind* of update to do, and parameters to
that *kind* of update; what really happens internally (one or more
SETFs, or alternately re-build anything that changed and share what
didn't change) doesn't need to be known by the caller. All the
caller needs to know is generically whether the update is in-place
or non-destructive. (If it's non-destructive, then the new edition
of the data structure is one of the return values. If it's
in-place, then there's no need to bother with setq of the new
value, because my structures always have a header cell that has a
tag for the intentional datatype, and that header cell always
points to either the in-place-modified object or the
latest-edition-of-object.) </tmi>
<mtmi> I'd rather program in "paranoid" mode than in "risk shoot foot" mode.
The CAR of each ADT object is a keyword identifying the
intentional type of that object, and every function that
operates on that intentional type first checks if the parameter
really does have the expected CAR, just to make sure I didn't
copy&paste some inappropriate function name in my code. Yeah, it
takes extra CPU cycles to do that checking on every calls, but it
sure saves me from shooting myself in the foot and having to spend
an hour to find out how I did it before I can fix it. <mtmi>
<emtmi> TMI = Too Much Information (actually YMMV, some readers might like it)
MTMI = More of Too Much Information
EMTMI = Even More of Too Much Information (only newbies need read)
Credits to Babylon Five for the "I spy" game in the cargo hold.
I spy something that starts with the letter B. Boxes!
I spy something that starts with the letter M. More boxes! <emtmi>
------------------------------
Date: Sun, 20 Jul 2008 07:16:24 GMT
From: "David Formosa (aka ? the Platypus)" <dformosa@usyd.edu.au>
Subject: Re: understading double scalar variable $$
Message-Id: <slrng85qoj.3la.dformosa@localhost.localdomain>
On Sat, 19 Jul 2008 19:27:16 GMT, sln@netherlands.com <sln@netherlands.com>
wrote:
[...]
> sub parse_text
>{
> my $text = @_;
my $text = shift;
OR
my ($text) = @_;
------------------------------
Date: 6 Apr 2001 21:33:47 GMT (Last modified)
From: Perl-Users-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin)
Subject: Digest Administrivia (Last modified: 6 Apr 01)
Message-Id: <null>
Administrivia:
#The Perl-Users Digest is a retransmission of the USENET newsgroup
#comp.lang.perl.misc. For subscription or unsubscription requests, send
#the single line:
#
# subscribe perl-users
#or:
# unsubscribe perl-users
#
#to almanac@ruby.oce.orst.edu.
NOTE: due to the current flood of worm email banging on ruby, the smtp
server on ruby has been shut off until further notice.
To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.
#To request back copies (available for a week or so), send your request
#to almanac@ruby.oce.orst.edu with the command "send perl-users x.y",
#where x is the volume number and y is the issue number.
#For other requests pertaining to the digest, send mail to
#perl-users-request@ruby.oce.orst.edu. Do not waste your time or mine
#sending perl questions to the -request address, I don't have time to
#answer them even if I did know the answer.
------------------------------
End of Perl-Users Digest V11 Issue 1734
***************************************