You have this:
my $confOut = $conf->XMLout($confIn, OutputFile => $xmlConf);
# ...
$confOut->{conf}->{lastRun} = $epoch;
I don't use XML::Simple much, but I'm guessing that XMLout returns a simple status code (1 for success), and you're trying to use that has a hash reference.
I'm guessing here somewhat since the error you show us says "line foo", and there's no indication of which line that is.
Update: After a little fooling around, I find that this does what I think you want:
use strict;
use warnings;
use XML::Simple;
my $xmlConf = "file.xml";
my $conf = new XML::Simple(
NoAttr => 1,
KeyAttr => [],
ForceArray => [qw(box1 box2)],
KeepRoot => 1,
SearchPath => "."
);
my $confIn = $conf->XMLin("$xmlConf");
printf "box 1: Username - %s, Password - %s\n",
$confIn->{conf}->{box1}[0]->{username},
$confIn->{conf}->{box1}[0]->{password};
printf "box 2: Username - %s, Password - %s\n",
$confIn->{conf}->{box2}[0]->{username},
$confIn->{conf}->{box2}[0]->{password};
my $epoch = time();
$confIn->{conf}->{lastRun} = $epoch;
$conf->XMLout( $confIn, OutputFile => $xmlConf );