in reply to foreach loop on one line
Is this not valid code?
Very close, but no, it's not. You need a code block with that foreach, as it is:
do { print "$_ could not be restored!\n" unless ( exists $found{$_} ) +} foreach (@files);
or (more commonly)
foreach (@files) { print "$_ could not be restored!\n" unless ( exists $found{$_} ); }
or you could
exists $found{$_} or print "$_ could not be restored!\n" foreach @file +s;
Why does this last one work? An (inclusive) or statement is true iff one of its disjuncts is true. If exists $found{$_} is true, there's no need to evaluate the 'expression' on the other side of the or, because the entire or statement is true. However, if exists $found{$_} is not true, then the other side of the or will be evaluated, viz., print "$_ could not be restored!\n".
Hope this helps!
In Section
Seekers of Perl Wisdom