in reply to can we pass two variable to foreach loop

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:
foreach my ($x,$y) (@name,@lastname) { do something }
Only that it would be written as:
use List::MoreUtils qw(each_array); ... my $names = each_array(@name, @lastname); while ( my ($x, $y) = $names->() ) { do something }
With each_array, you may create an iterator which is able to loop over more than one array at once. That easy.