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

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: