Как Perl-разработчик, вы должны иметь четкое представление о синтаксисе, семантике и передовом опыте языка. Этот блог содержит множество вопросов и ответов на собеседованиях по программированию на Perl, которые помогут вам отточить свои навыки и продемонстрировать свой опыт во время собеседований при приеме на работу.

1. Как найти факториал числа с помощью цикла for, цикла while и рекурсии в Perl?

Использование цикла

use strict;
use warnings;
my $num = 6;
my $result = 1;
foreach (1..$num) {
  $result = $_ * $result;
}
print " using for loop = $result\n"; #output : using for loop = 720

Использование цикла

use strict;
use warnings;
my $num = 6;
my $result = 1;
my $count = 1;
while ($count <= $num) {
   $result = $count * $result;
   $count++;
 }
 print "using while loop = $result\n"; #output : using while loop = 720

Использование рекурсивного цикла

use strict;
use warnings;
my $num = 6;
sub fact {
my $x = $_[0];
if ($x == 0 || $x == 1) {
    return 1;
  } else {
    return $x * fact($x - 1);
  }
}
print "using recursive = ".fact($num)."\n";

2. Как создать ряд Фибоначчи в Perl?

use strict;
use warnings;

print "Enter the number of terms: ";
my $num_terms = <STDIN>;
chomp $num_terms;

my ($prev, $curr) = (0, 1);

print "Fibonacci series:\n";
for (my $i = 0; $i < $num_terms; $i++) {
    print "$prev\n";
    ($prev, $curr) = ($curr, $prev + $curr);
}

3. Как в Perl проверить, является ли число простым?

use strict;
use warnings;
sub Check_prime {
 my $num = shift;
 return 0 if $num <= 1;
 foreach (2..sqrt($num)) {
   return 0 if $num % $_ == 0;   
 }
 return 1;
}
if (Check_prime(13)) {
 print "is prime number\n";
}else{
 print "is not prime number\n"
}

4. Как в Perl найти самый большой элемент массива?

use strict;
use warnings;
my @number = (54,65,21,53,98,47,26,35);
my $result = 0;
foreach(@number){
   if($result < $_){
       $result = $_;
   }
}
print "$result\n";

5. Сумма всех чисел в массиве.

use strict;
use warnings;
my @number = (54,65,21,53,98,47,26,35);
my $result = 0;
foreach(@number){
   $result += $_;
}
print "$result\n";

6. Как перевернуть заданную строку в Perl?

my $str = "Suraj";
my $res;
my @arrStr = split('',$str);
for (my $var = $#arrStr; $var >= 0; $var--) {
 $res .= $arrStr[$var];
}
print "$res\n";

7. Удалите повторяющийся элемент из массива.

use strict;
use warnings;
my @array = (1,85,54,1,55,85,65,52,54);
my @result;
my %hash;
foreach(@array){
   if(!$hash{$_}){
       $hash{$_} = $_;
       push(@result,$_);
   }
}
print "@result\n";

8. Отсутствует элемент в массиве

use strict;
use warnings;
my @array = (1,2,3,4,5,7,8,9);
my %hash;
foreach(@array){
     $hash{$_} = 1;
 }
for(my $i = 1; $i <= $#array + 1; $i++){
     if(!$hash{$i}){
         print "Missing element is $i\n";
     }
 }

9. Распечатайте число от 1 до 100 без использования петель

use strict;
use warnings;
my $num = 100;
 sub Print_num {
     my ($start, $end) = @_;
     if($start <= $end){
         print "$start\n";
         Print_num($start + 1, $end);
     }
 }
 Print_num(1, $num);

10. Замена переменной без использования временной переменной

use strict;
use warnings;
my $num1 = 10;
my $num2 = 20;
# Before swaping
print "Before swaping => $num1 , $num2 \n";
($num1, $num2) = ($num2, $num1);
#After swaping
print "After swaping => $num1 , $num2 \n";

11. Сортировка массива с помощью пузырьковой сортировки в Perl

use strict;
use warnings;
my @Number = (84,52,95,35,42,18,5,73,24,0,9);
for(my $i = 0; $i<= $#Number; $i++){
   for(my $j = 0; $j < $#Number - $i; $j++){
       if($Number[$j + 1] < $Number[$j]){
           ($Number[$j], $Number[$j + 1]) = ($Number[$j + 1], $Number[$j])
       }
   }
}
print "@Number\n";

12. Отсортируйте массив с помощью быстрой сортировки в Perl

use strict;
 use warnings;
 my @Number = (84,52,95,35,42,18,5,73,24,0,9,6);
 sub Sort_number {
     my @arr = @_;
     return @arr if @arr < 2;
     my $p = pop(@arr);
     return Sort_number(grep{ $_ < $p } @arr),$p,Sort_number(grep{ $_ > $p } @arr)
 }
 
 my @Result = Sort_number(@Number);
 
 print "@Result\n";

13. Найдите значение из заданного массива с помощью линейного поиска.

use strict;
 use warnings; 
 my @Number = (84,52,95,35,42,18,5,73,24,0,9,6);
 my $num = 73;
 my $Result;
 foreach(@Number){
     if($_ == $num){
         $Result = $_;
         last;
     }
 }
 
 if($Result){
     print "Value is present\n";
 }else{
     print "value is not present\n";
 }

14. Найдите значение из заданного массива с помощью бинарного поиска.

use strict;
use warnings;
my @Number = qw(0 5 6 9 18 24 35 42 52 73 84 95);
sub binary_search{
     my ($num, $list) = @_;
     my $low = 0;
     my $high = @{$list} + 1;
     while($low <= $high){
         my $mid = int(($low + $high)/2);
         if($num < $list->[$mid]){
             $high = $mid - 1;
             next;
         }
         if($num > $list->[$mid]){
             $low = $mid + 1;
             next;
         }
         return $mid;
     }
 }
 
 if(binary_search(42, \@Number)){
     print "Value is present\n";
 }else{
     print "Value is not present\n";
 }

15. Найдите самый длинный палиндром в данном слове

use strict;
use warnings;

my $str = "bababababbaa";
sub palindrome_check{
  my ($s) = @_;
  my $longest_Str = '';
  for my $i (0..length($s) - 1){
    for my $j($i..length($s) - 1){
      my $sub = substr($s,$i, $j - $i + 1);
      if($sub eq reverse($sub) && length($sub) > length($longest_Str)){
        $longest_Str =  $sub;
      }
    }
  }
  return $longest_Str;
}
print palindrome_check($str);