Adding to the suggestions by BrowserUk, Zaxo and grinder, another possible solution would be to use each_array from List::MoreUtils. It is a bit of overkill for your current case, but it would work well if you generalized your problem to:
in reply to can we pass two variable to foreach loop
Only that it would be written as:
foreach my ($x,$y) (@name,@lastname)
With each_array, you may create an iterator which is able to loop over more than one array at once. That easy.
use List::MoreUtils qw(each_array);
my $names = each_array(@name, @lastname);
while ( my ($x, $y) = $names->() )