[Date Prev][Date Next][Thread Prev][Thread Next] [Search] [Date Index] [Thread Index]

[MacPerl-Porters] [PATCH 5.6.0] tests in :t:op:*.t




It appears that macperl.com and macperl.org have fallen off the internet
and I cannot get nslookup to resolve them here any more.  Mail sent today
to the macperl-porters list has not gone through.  I will try to contact
Rich and/or Vickie separately.

Here is the latest round:

Trying to run miniperl over :op:lex_assing.t crashes MPW for me and I am
not sure why yet.

This failure looks quite bad:

 miniperl :op:lop.t
 1..7
 not ok 1
 not ok 2
 not ok 3
 not ok 4
 not ok 5
 not ok 6
 ok 7

This one looks ominous as well, the test is of the return value of 
a call to C<sleep 3;> 

 miniperl :op:sleep.t
 1..1
 not ok 1 3148060

The result of :op:stat.t is amusing - full of unixisms like /dev/null and
/tmp apparently.

Another amusing result is:

 miniperl :op:time.t
 1..6
 times not implemented at :op:time.t line 8.

At any rate here is a patch for most things in :t:op:*.t

diff -ru :op.orig:assignwarn.t :op:assignwarn.t
--- :op.orig:assignwarn.t	Mon Mar 13 21:25:37 2000
+++ :op:assignwarn.t	Mon May 29 19:58:45 2000
@@ -8,7 +8,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 use strict;
diff -ru :op.orig:attrs.t :op:attrs.t
--- :op.orig:attrs.t	Wed Jan 26 21:40:10 2000
+++ :op:attrs.t	Mon May 29 19:59:44 2000
@@ -4,7 +4,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 sub NTESTS () ;
diff -ru :op.orig:avhv.t :op:avhv.t
--- :op.orig:avhv.t	Fri Mar  3 17:10:19 2000
+++ :op:avhv.t	Mon May 29 20:01:17 2000
@@ -2,7 +2,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 require Tie::Array;
diff -ru :op.orig:bop.t :op:bop.t
--- :op.orig:bop.t	Mon Feb 28 09:38:33 2000
+++ :op:bop.t	Mon May 29 20:02:03 2000
@@ -6,7 +6,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 print "1..30\n";
diff -ru :op.orig:closure.t :op:closure.t
--- :op.orig:closure.t	Fri Feb  4 04:41:08 2000
+++ :op:closure.t	Mon May 29 20:03:01 2000
@@ -7,7 +7,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 use Config;
diff -ru :op.orig:defins.t :op:defins.t
--- :op.orig:defins.t	Tue Jul 20 17:18:13 1999
+++ :op:defins.t	Mon May 29 20:05:46 2000
@@ -6,7 +6,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
     $SIG{__WARN__} = sub { $warns++; warn $_[0] };
     print "1..14\n";
 }
diff -ru :op.orig:die_exit.t :op:die_exit.t
--- :op.orig:die_exit.t	Sat Feb 26 06:34:57 2000
+++ :op:die_exit.t	Mon May 29 20:07:41 2000
@@ -7,7 +7,12 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib' if -e '../lib';
+	if ($^O eq 'MacOS') {
+        unshift @INC, '::lib:' if -e '::lib:';
+	}
+	else {
+        unshift @INC, '../lib' if -e '../lib';
+	}
 }
 
 if ($^O eq 'mpeix') {
diff -ru :op.orig:exists_sub.t :op:exists_sub.t
--- :op.orig:exists_sub.t	Fri Jan 21 01:40:21 2000
+++ :op:exists_sub.t	Mon May 29 20:09:05 2000
@@ -2,7 +2,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 print "1..9\n";
diff -ru :op.orig:filetest.t :op:filetest.t
--- :op.orig:filetest.t	Fri Aug 20 15:52:02 1999
+++ :op:filetest.t	Mon May 29 20:10:36 2000
@@ -5,7 +5,12 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib' if -d '../lib';
+	if ($^O eq 'MacOS') {
+        unshift @INC, '::lib:' if -d '::lib:';
+	}
+	else {
+        unshift @INC, '../lib' if -d '../lib';
+	}
 }
 
 use Config;
diff -ru :op.orig:flip.t :op:flip.t
--- :op.orig:flip.t	Tue Jul 20 17:18:13 1999
+++ :op:flip.t	Mon May 29 20:12:24 2000
@@ -17,7 +17,12 @@
 
 @a = ('a','b','c','d','e','f','g');
 
-open(of,'../Configure');
+if ($^O eq 'MacOS') {
+    open(of,'::Configure');
+}
+else {
+    open(of,'../Configure');
+}
 while (<of>) {
     (3 .. 5) && ($foo .= $_);
 }
diff -ru :op.orig:fork.t :op:fork.t
--- :op.orig:fork.t	Sat Feb 26 06:34:58 2000
+++ :op:fork.t	Mon May 29 20:13:56 2000
@@ -4,7 +4,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
     require Config; import Config;
     unless ($Config{'d_fork'}
 	    or ($^O eq 'MSWin32' and $Config{useithreads}
diff -ru :op.orig:glob.t :op:glob.t
--- :op.orig:glob.t	Tue Oct 12 15:29:02 1999
+++ :op:glob.t	Mon May 29 20:15:42 2000
@@ -2,7 +2,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 print "1..6\n";
diff -ru :op.orig:gv.t :op:gv.t
--- :op.orig:gv.t	Mon Mar 13 21:25:37 2000
+++ :op:gv.t	Mon May 29 20:17:37 2000
@@ -6,7 +6,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }   
 
 use warnings;
diff -ru :op.orig:hashwarn.t :op:hashwarn.t
--- :op.orig:hashwarn.t	Mon Mar 13 21:25:37 2000
+++ :op:hashwarn.t	Mon May 29 20:18:25 2000
@@ -2,7 +2,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 use strict;
diff -ru :op.orig:int.t :op:int.t
--- :op.orig:int.t	Sun Oct 24 14:31:29 1999
+++ :op:int.t	Mon May 29 20:19:32 2000
@@ -2,7 +2,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 print "1..6\n";
diff -ru :op.orig:lfs.t :op:lfs.t
--- :op.orig:lfs.t	Thu Mar  2 18:12:27 2000
+++ :op:lfs.t	Mon May 29 20:33:47 2000
@@ -4,7 +4,7 @@
 
 BEGIN {
 	chdir 't' if -d 't';
-	unshift @INC, '../lib';
+	unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 	# Don't bother if there are no quad offsets.
 	require Config; import Config;
 	if ($Config{lseeksize} < 8) {
diff -ru :op.orig:lop.t :op:lop.t
--- :op.orig:lop.t	Tue Jul 20 17:18:14 1999
+++ :op:lop.t	Mon May 29 20:35:41 2000
@@ -6,7 +6,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 print "1..7\n";
diff -ru :op.orig:magic.t :op:magic.t
--- :op.orig:magic.t	Mon Mar 13 21:25:37 2000
+++ :op:magic.t	Mon May 29 20:39:05 2000
@@ -3,7 +3,7 @@
 BEGIN {
     $| = 1;
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
     $SIG{__WARN__} = sub { die "Dying on warning: ", @_ };
 }
 
diff -ru :op.orig:misc.t :op:misc.t
--- :op.orig:misc.t	Sun Mar 12 20:00:29 2000
+++ :op:misc.t	Mon May 29 20:42:08 2000
@@ -4,7 +4,7 @@
 # separate executable and can't simply use eval.
 
 chdir 't' if -d 't';
-unshift @INC, "../lib";
+unshift @INC, ($^O eq 'MacOS') ? "::lib:" : "../lib";
 $ENV{PERL5LIB} = "../lib";
 
 $|=1;
diff -ru :op.orig:mkdir.t :op:mkdir.t
--- :op.orig:mkdir.t	Sun Feb 20 17:48:06 2000
+++ :op:mkdir.t	Mon May 29 20:43:19 2000
@@ -4,7 +4,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 use File::Path;
diff -ru :op.orig:nothr5005.t :op:nothr5005.t
--- :op.orig:nothr5005.t	Wed Mar 22 14:43:59 2000
+++ :op:nothr5005.t	Mon May 29 20:44:19 2000
@@ -6,7 +6,7 @@
 BEGIN
  {
   chdir 't' if -d 't';
-  unshift @INC, "../lib";
+  unshift @INC, ($^O eq 'MacOS') ? "::lib:" : "../lib";
   require Config;
   import Config;
   if ($Config{'use5005threads'})
diff -ru :op.orig:numconvert.t :op:numconvert.t
--- :op.orig:numconvert.t	Tue Feb 29 06:30:10 2000
+++ :op:numconvert.t	Mon May 29 20:45:07 2000
@@ -37,7 +37,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    @INC = '../lib';
+    @INC = ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 use strict 'vars';
diff -ru :op.orig:pack.t :op:pack.t
--- :op.orig:pack.t	Mon Mar 13 21:25:37 2000
+++ :op:pack.t	Mon May 29 20:46:44 2000
@@ -2,7 +2,12 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib' if -d '../lib';
+	if ($^O eq 'MacOS') {
+        unshift @INC, '::lib:' if -d '::lib:';
+	}
+	else {
+	    unshift @INC, '../lib' if -d '../lib';
+	}
     require Config; import Config;
 }
 
diff -ru :op.orig:pat.t :op:pat.t
--- :op.orig:pat.t	Mon Mar 13 21:25:37 2000
+++ :op:pat.t	Mon May 29 20:48:39 2000
@@ -8,7 +8,12 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, "../lib" if -d "../lib";
+	if ($^O eq 'MacOS') {
+        unshift @INC, "::lib:" if -d "::lib:";
+	}
+	else {
+	    unshift @INC, "../lib" if -d "../lib";
+	}
 }
 eval 'use Config';          #  Defaults assumed if this fails
 
diff -ru :op.orig:quotemeta.t :op:quotemeta.t
--- :op.orig:quotemeta.t	Tue Jul 20 17:18:14 1999
+++ :op:quotemeta.t	Mon May 29 20:50:02 2000
@@ -2,7 +2,12 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib' if -d '../lib';
+	if ($^O eq 'MacOS') {
+        unshift @INC, '::lib:' if -d '::lib:';
+	}
+	else {
+	    unshift @INC, '../lib' if -d '../lib';
+	}
     require Config; import Config;
 }
 
diff -ru :op.orig:rand.t :op:rand.t
--- :op.orig:rand.t	Tue Jul 20 17:18:15 1999
+++ :op:rand.t	Mon May 29 20:51:10 2000
@@ -17,7 +17,12 @@
 
 BEGIN {
     chdir "t" if -d "t";
-    unshift @INC, "../lib" if -d "../lib";
+	if ($^O eq 'MacOS') {
+        unshift @INC, "::lib:" if -d "::lib:";
+	}
+	else {
+	    unshift @INC, "../lib" if -d "../lib";
+	}
 }
 
 use strict;
diff -ru :op.orig:read.t :op:read.t
--- :op.orig:read.t	Tue Jul 20 17:18:15 1999
+++ :op:read.t	Mon May 29 20:53:18 2000
@@ -5,7 +5,8 @@
 print "1..4\n";
 
 
-open(FOO,'op/read.t') || open(FOO,'t/op/read.t') || die "Can't open op.read";
+open(FOO,'op/read.t') || open(FOO,'t/op/read.t') || open(FOO,':op:read.t') ||
+    die "Can't open op.read";
 seek(FOO,4,0);
 $got = read(FOO,$buf,4);
 
diff -ru :op.orig:readdir.t :op:readdir.t
--- :op.orig:readdir.t	Tue Oct 12 15:30:21 1999
+++ :op:readdir.t	Mon May 29 20:54:06 2000
@@ -2,7 +2,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 eval 'opendir(NOSUCH, "no/such/directory");';
diff -ru :op.orig:regexp.t :op:regexp.t
--- :op.orig:regexp.t	Sat Nov 13 19:23:17 1999
+++ :op:regexp.t	Mon May 29 20:56:39 2000
@@ -33,12 +33,18 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib' if -d '../lib';
+	if ($^O eq 'MacOS') {
+        unshift @INC, '::lib:' if -d '::lib:';
+	}
+	else {
+	    unshift @INC, '../lib' if -d '../lib';
+	}
 }
 
 $iters = shift || 1;		# Poor man performance suite, 10000 is OK.
 
 open(TESTS,'op/re_tests') || open(TESTS,'t/op/re_tests') ||
+    open(TESTS,':op:re_tests') || 
 	die "Can't open re_tests";
 
 while (<TESTS>) { }
diff -ru :op.orig:regexp_noamp.t :op:regexp_noamp.t
--- :op.orig:regexp_noamp.t	Tue Jul 20 17:18:15 1999
+++ :op:regexp_noamp.t	Mon May 29 20:57:49 2000
@@ -1,7 +1,7 @@
 #!./perl
 
 $skip_amp = 1;
-for $file ('op/regexp.t', 't/op/regexp.t') {
+for $file ('op/regexp.t', 't/op/regexp.t', ':op:regexp.t') {
   if (-r $file) {
     do $file;
     exit;
diff -ru :op.orig:runlevel.t :op:runlevel.t
--- :op.orig:runlevel.t	Wed Mar  1 06:28:41 2000
+++ :op:runlevel.t	Mon May 29 20:58:59 2000
@@ -7,7 +7,7 @@
 ##
 
 chdir 't' if -d 't';
-unshift @INC, "../lib";
+unshift @INC, ($^O eq 'MacOS') ? "::lib:" : "../lib";
 $Is_VMS = $^O eq 'VMS';
 $Is_MSWin32 = $^O eq 'MSWin32';
 $ENV{PERL5LIB} = "../lib" unless $Is_VMS;
diff -ru :op.orig:sort.t :op:sort.t
--- :op.orig:sort.t	Sun Mar 19 05:25:29 2000
+++ :op:sort.t	Mon May 29 21:03:50 2000
@@ -2,7 +2,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 use warnings;
 print "1..49\n";
diff -ru :op.orig:sprintf.t :op:sprintf.t
--- :op.orig:sprintf.t	Mon Mar 13 21:25:37 2000
+++ :op:sprintf.t	Mon May 29 21:06:05 2000
@@ -4,7 +4,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }   
 use warnings;
 
diff -ru :op.orig:stat.t :op:stat.t
--- :op.orig:stat.t	Sat Feb 26 06:34:58 2000
+++ :op:stat.t	Mon May 29 21:06:44 2000
@@ -4,7 +4,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 use Config;
diff -ru :op.orig:subst.t :op:subst.t
--- :op.orig:subst.t	Wed Dec  8 20:17:53 1999
+++ :op:subst.t	Mon May 29 21:09:21 2000
@@ -2,7 +2,12 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib' if -d '../lib';
+	if ($^O eq 'MacOS') {
+        unshift @INC, '::lib:' if -d '::lib:';
+	}
+	else {
+	    unshift @INC, '../lib' if -d '../lib';
+	}
     require Config; import Config;
 }
 
diff -ru :op.orig:subst_amp.t :op:subst_amp.t
--- :op.orig:subst_amp.t	Tue Jul 20 17:18:15 1999
+++ :op:subst_amp.t	Mon May 29 21:12:23 2000
@@ -2,7 +2,12 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib' if -d '../lib';
+	if ($^O eq 'MacOS') {
+        unshift @INC, '::lib:' if -d '::lib:';
+	}
+	else {
+	    unshift @INC, '../lib' if -d '../lib';
+	}
     require Config; import Config;
 }
 
diff -ru :op.orig:subst_wamp.t :op:subst_wamp.t
--- :op.orig:subst_wamp.t	Tue Jul 20 17:18:15 1999
+++ :op:subst_wamp.t	Mon May 29 21:13:36 2000
@@ -1,7 +1,7 @@
 #!./perl
 
 $dummy = defined $&;		# Now we have it...
-for $file ('op/subst.t', 't/op/subst.t') {
+for $file ('op/subst.t', 't/op/subst.t', ':op:subst.t') {
   if (-r $file) {
     do $file;
     exit;
diff -ru :op.orig:substr.t :op:substr.t
--- :op.orig:substr.t	Sun Feb 20 22:35:18 2000
+++ :op:substr.t	Mon May 29 21:10:41 2000
@@ -4,7 +4,12 @@
 #P = start of string  Q = start of substr  R = end of substr  S = end of string
 
 BEGIN {
-    unshift @INC, '../lib' if -d '../lib' ;
+    if ($^O eq 'MacOS') {
+        unshift @INC, '::lib:' if -d '::lib:' ;
+	}
+	else {
+	    unshift @INC, '../lib' if -d '../lib' ;
+	}
 }
 use warnings ;
 
diff -ru :op.orig:taint.t :op:taint.t
--- :op.orig:taint.t	Tue Mar 21 08:55:48 2000
+++ :op:taint.t	Mon May 29 21:15:05 2000
@@ -9,7 +9,12 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib' if -d '../lib';
+	if ($^O eq 'MacOS') {
+        unshift @INC, '::lib:' if -d '::lib:';
+	}
+	else {
+	    unshift @INC, '../lib' if -d '../lib';
+	}
 }
 
 use strict;
diff -ru :op.orig:tiehandle.t :op:tiehandle.t
--- :op.orig:tiehandle.t	Tue Jul 20 17:18:15 1999
+++ :op:tiehandle.t	Mon May 29 21:15:58 2000
@@ -2,7 +2,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 my @expect;
diff -ru :op.orig:tr.t :op:tr.t
--- :op.orig:tr.t	Tue Jul 20 17:18:15 1999
+++ :op:tr.t	Mon May 29 21:21:13 2000
@@ -2,7 +2,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, "../lib";
+    unshift @INC, ($^O eq 'MacOS') ? "::lib:" : "../lib";
 }
 
 print "1..4\n";
diff -ru :op.orig:undef.t :op:undef.t
--- :op.orig:undef.t	Tue Jul 20 17:18:15 1999
+++ :op:undef.t	Mon May 29 21:22:02 2000
@@ -2,7 +2,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    unshift @INC, ($^O eq 'MacOS') ? '::lib:' : '../lib';
 }
 
 print "1..27\n";
diff -ru :op.orig:universal.t :op:universal.t
--- :op.orig:universal.t	Tue Mar 14 17:22:41 2000
+++ :op:universal.t	Mon May 29 21:23:17 2000
@@ -5,7 +5,12 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib' if -d '../lib';
+	if ($^O eq 'MacOS') {
+        unshift @INC, '::lib:' if -d '::lib:';
+	}
+	else {
+	    unshift @INC, '../lib' if -d '../lib';
+	}
 }
 
 print "1..73\n";
diff -ru :op.orig:ver.t :op:ver.t
--- :op.orig:ver.t	Wed Feb 23 08:23:10 2000
+++ :op:ver.t	Mon May 29 21:24:27 2000
@@ -2,7 +2,7 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, "../lib";
+    unshift @INC, ($^O eq 'MacOS') ? "::lib:" : "../lib";
 }
 
 print "1..22\n";
diff -ru :op.orig:write.t :op:write.t
--- :op.orig:write.t	Thu Feb 10 00:51:55 2000
+++ :op:write.t	Mon May 29 21:26:10 2000
@@ -3,6 +3,7 @@
 print "1..8\n";
 
 my $CAT = ($^O eq 'MSWin32') ? 'type' : 'cat';
+$CAT = ($^O eq 'MacOS') ? 'catenate' : $CAT;
 
 format OUT =
 the quick brown @<<
End of Patch

Peter Prymmer





==== Want to unsubscribe from this list?
==== Send mail with body "unsubscribe" to macperl-porters-request@macperl.org