Re: Problem med Perl-kod
Reine Johansson:
> Håller på att flytta över en installation från OpenBSD 3.1 till Debian
> GNU/Linux 3.1 (sarge). Jag har nu fått problem med ett stycke Perl-kod.
>
> #!/usr/bin/perl
>
> $dbfile="news";
> dbmopen %news, $dbfile, 0444 || die "Couldn't open $dbfile: $!\n";
> @keys = sort{$b<=>$a}(keys %news);
> foreach $k (@keys) {
> print "$news{$k} \n";
> }
>
> Lite info om filen:
> -rw-r--r-- 1 brain brain 98304 2004-08-24 02:10 news.db
> news.db: Berkeley DB 1.85 (Hash, version 2, native byte-order)
>
> På BSD-burken listas innehållet i filen korrekt, men på Debian-burken
> får jag ingen output. Är det någon som vet vad som kan vara fel? En
> märklig(?) sak är att när scriptet körs på debianburken så skapas
> news.pag och news.dir, dock inte när samma körs på BSD-burken.
Det här har jag en del erfarenhet av :)
Det första problemet är att man kan ha olika databashanterare i Perl,
och att default-hanteraren är olika på olika system. Det här kan lösas
genom att explicit ange vilken man vill ha. Det enklaste sättet att
göra detta i det här fallet är att lägga till "use DB_File;" i början
av skriptet, då används alltid Berkeley DB.
Det andra problemet är att det finns olika versioner av Berkeley
DB-databaser. Den senaste, som används av Perl i sarge, är
4.2. Databasen måste alltså vara i den här versionen för att den ska
kunna läsas av Perl. Man kan enkelt uppgradera databasen till den
versionen med kommandot db4.2_upgrade från paketet
db4.2-util. Problemet är då förstås att den förmodligen slutar fungera
i BSD om Perl använder en äldre Berkeley DB där.
--
Pelle
Reply to: