Hi,

(excuse my poor English, I hope it will be still intelligible ;-)

I want to use Perl for some substitutions on large texts, but it seems
to me that perl does not correctly free memory after evaluating r.e.
with parentheses (see below). Problem is solved by using eval statement
around r.e. -- it's imho rather complicated solution, but I haven't
found any other way.

Thank you for improvement suggestions.

P.

whatever$ cat a.pl
#!/usr/bin/perl -w

$_ = ' ' x 1024000; warn `ps -p $$ -o vsz=`;
/()/;    warn `ps -p $$ -o vsz=`;
/( )/;   warn `ps -p $$ -o vsz=`;
s/()//;  warn `ps -p $$ -o vsz=`;
s/( )//; warn `ps -p $$ -o vsz=`;
/(?: )/; warn `ps -p $$ -o vsz=`;

sunos$ uname -rs
SunOS 5.7
sunos$ perl -v | grep 'version'
This is perl, version 5.005_03 built for sun4-solaris
sunos$ perl a.pl
4640
5616
6640
7672
8696
8696

irix$ uname -rs
IRIX64 6.5
irix$ perl -v | grep 'version'
This is perl, version 5.004_04 built for IP19-irix
irix$ perl a.pl
  4800
  5824
  6848
  8896
  9920
  9920

linux$ uname -rs
Linux 2.2.18pre21
linux$ perl -v | grep 'version'
This is perl, version 5.005_03 built for i386-linux
linux$ perl a.pl
 4464
 5468
 6472
 7476
 8480
 8480

And on Windows NT Server 4.0 SP6 with ActivePerl 5.6 using pslist from
sysinternals.com:

C:\>type a.pl
#!/usr/bin/perl -w

$_ = ' ' x 1024000; warn join "\n", grep ($_ =~ /$$|Name/, split /\n/,
`pslist $$`), "";
/()/;    warn grep ($_ =~ /$$/, split /\n/, `pslist $$`), "\n";
/( )/;   warn grep ($_ =~ /$$/, split /\n/, `pslist $$`), "\n";
s/()//;  warn grep ($_ =~ /$$/, split /\n/, `pslist $$`), "\n";
s/( )//; warn grep ($_ =~ /$$/, split /\n/, `pslist $$`), "\n";
/(?: )/; warn grep ($_ =~ /$$/, split /\n/, `pslist $$`), "\n";

C:\>perl -v | grep "buil"
File STDIN:
This is perl, v5.6.0 built for MSWin32-x86-multi-thread
Binary build 613 provided by ActiveState Tool Corp.
http://www.ActiveState.com

C:\>perl a.pl
Name         Pid Pri Thd  Hnd    Mem     User Time   Kernel Time
Elapsed Time
Perl         302   8   1   17   3716   0:00:00.070   0:00:00.060
0:00:00.570
Perl         302   8   1   17   4776   0:00:00.090   0:00:00.080
0:00:01.091
Perl         302   8   1   17   5792   0:00:00.110   0:00:00.100
0:00:01.602
Perl         302   8   1   17   6796   0:00:00.130   0:00:00.120
0:00:02.123
Perl         302   8   1   17   7812   0:00:00.140   0:00:00.160
0:00:02.643
Perl         302   8   1   17   7812   0:00:00.140   0:00:00.180
0:00:03.134

Reply via email to