Some possible debugging advice: are you printing the content header? print "Content-type: text/html\n\n"; turn on warnings: (use -w) use strict; die "File not found unless" -f $config; open(CON,$config) || die $!; my $list = join '', ; ... open(CONOUT, ">$config") || die $!; Also consider using flock, or using some other configuration method (berkely DB [DB_File] or XML [xml::Simple] )