Technology and Trends
 USENET Archives
  
From: poe@daimi.aau.dk (Peter Orbaek)
Newsgroups: comp.lang.perl,alt.os.linux
Subject: Perl 4.019 on Linux 0.12, problems with $&...
Keywords: perl, $&, length
Date: 4 Feb 92 16:00:24 GMT
Organization: DAIMI: Computer Science Department, Aarhus University, Denmark

I'm attempting to get perl up and running on my 386/33 running linux 0.12,
using gcc 1.40 (the compiler that comes with linux).

After getting through configure, and doing various small hacks in the
makefile, I have got it to compile cleanly, except for minor warnings about
return-types of getgrgid() and such.

But problems arise when I run the test-suite. First I must say that floating
point support on linux is fairly bad, so I get several failed tests because
sprintf prints - for instance - 12 as 11.99999999997.

This can be remedied by compiling with these options, in effect making an
"integer-perl":

	-Ddouble=int -Datof=atoi -DINT_PERL

and then doing some minor hacks in str.c and dolist.c to get proper conversions
from ints to strings, and removing packing of floats and doubles.

With these hacks I get fewer failed tests than with the original floatin-point
perl.

BUT , in both cases the produced perl fails on tests:  op/pat 28,29,30

I seems that $& doesn't get set correctly. Why can this happen??
This problem also affects several other tests.
At least in op/pat test #28 $& is set to the empty string or null...

Another failure that seems to occur only with "integer-perl" is that the
test: comp/< something...> fails, due to length('\\\\') not returning 2
or, more accurately:

(length('\\\\') == 2)   ==> false

but

$x = length('\\\\'); print $x;	==> prints 2

and

print length('\\\\'); 	==> prints 2

I have tried these things both with and without the perl-malloc if that
matters.


Suggestions anyone?


Thanks in advance.

	- Peter (poe@daimi.aau.dk)
--
Peter Orbaek ----------------- poe@daimi.aau.dk  |      ///
Hasle Ringvej 122, DK-8200 Aarhus N, DENMARK     |     ///
                                                 | \\\///
"Strong typing is for people with weak memories" |  \XX/

From: poe@daimi.aau.dk (Peter Orbaek)
Newsgroups: alt.os.linux
Subject: od(1) in Perl
Keywords: perl, od, linux commands
Date: 11 Feb 92 12:28:49 GMT
Organization: DAIMI: Computer Science Department, Aarhus University, Denmark

Here is a small Perl script that implements the od(1) command. I admit that
it suffers a bit from featuritis :-)


   - Peter (poe@daimi.aau.dk)

--- snip snip ---
#!/usr/local/bin/perl

# od.pl - poe@daimi.aau.dk, do not copyright

require 'getopt.pl';

&Getopt('w');

sub usage {
	print STDERR "Usage: $0 [-acdghox] [-w width] [file...]\n";
	exit(1);
}

&usage if $opt_h;

$w = $opt_w ? $opt_w : 16;

if($opt_g) {
	$w = $w > 14 ? 14 : $w;
	$fmt = "%4x: " . ("%02x  " x $w);
	$fmt2 = ("%1s" x $w) . "\n";
} elsif($opt_x) {
	$fmt = "%4x: " . ("%02x  " x $w) . "\n";
} elsif($opt_d) {
	$fmt = "%4d: " . ("%3d " x $w) . "\n";
} else {
	$fmt = "%4x: " . ("%03o " x $w) . "\n";
}

if($opt_a || $opt_c) {
	$fmt2 = "      " . ("%1s   " x $w) . "\n";
}

if($#ARGV < 0) {
	$ARGV[0] = "<&STDIN";
}

while($file = shift @ARGV) {
	open(FILE, $file) || next;
	print $file, ":\n";
	$pos = 0;

	while(read(FILE, $buf, $w) > 0) {
		@bytes = unpack("C$w", $buf);
		@chars = ();
		for (@bytes) {
			if($_ < 32 || $_ > 126) {
				push(@chars, '.');
			} else {
				push(@chars, pack("C", $_));
			}
		}
		if($opt_a || $opt_c || $opt_g) {
			printf($fmt, $pos, @bytes);
			printf($fmt2, @chars);
		} else {
			printf($fmt, $pos, @bytes);
		}
		$pos += $w;
	}
	$| = 1; print ""; $| = 0;
	close FILE;
}


--
Peter Orbaek ----------------- poe@daimi.aau.dk  |      ///
Hasle Ringvej 122, DK-8200 Aarhus N, DENMARK     |     ///
                                                 | \\\///
"Strong typing is for people with weak memories" |  \XX/