#!/usr/bin/perl
use strict;
use warnings;
use Math::Complex;

# Equation solver in Perl
sub solve_equation {
    my ($a, $b, $c) = @_;
    
    print "Solving: ${a}x² + ${b}x + ${c} = 0\n";
    
    # Linear equation (a = 0)
    if ($a == 0) {
        if ($b == 0) {
            return ($c == 0) ? "Infinite solutions" : "No solution";
        } else {
            my $x = -$c / $b;
            return "Linear equation: x = $x";
        }
    }
    
    # Quadratic equation
    my $discriminant = $b*$b - 4*$a*$c;
    print "Discriminant = $discriminant\n";
    
    if ($discriminant > 0) {
        my $x1 = (-$b + sqrt($discriminant)) / (2*$a);
        my $x2 = (-$b - sqrt($discriminant)) / (2*$a);
        return "Two real roots: x₁ = $x1, x₂ = $x2";
    } elsif ($discriminant == 0) {
        my $x = -$b / (2*$a);
        return "One real root: x = $x";
    } else {
        my $real_part = -$b / (2*$a);
        my $imag_part = sqrt(-$discriminant) / (2*$a);
        return "Complex roots: x₁ = $real_part + ${imag_part}i, x₂ = $real_part - ${imag_part}i";
    }
}

# Test cases
print "=== PERL EQUATION SOLVER ===\n";
print solve_equation(1, -3, 2), "\n\n";
print solve_equation(1, 2, 1), "\n\n";
print solve_equation(1, 0, 1), "\n\n";
print solve_equation(0, 2, -4), "\n\n";
print solve_equation(0, 0, 0), "\n\n";
print solve_equation(0, 0, 5), "\n";
