# Perl 前端示例 2 —— 语言小抄（每种形态各用一遍）
# Perl frontend example 2 — a syntax tour, one form per feature
#
#   vml run examples/perl/test/syntax.pl

# ① 标量：声明 my、算术、字符串拼接
my $a = 17;
my $b = 5;
print "add=", $a + $b, " sub=", $a - $b, " mul=", $a * $b, " mod=", $a % $b, " div=", $a / $b, "\n";

# ② 两套比较算子：数值 == != < >，字符串 eq ne lt gt
print "num: ", ($a > $b) ? "gt" : "le", "  str: ", ("abc" lt "abd") ? "lt" : "ge", "\n";

# ③ 数组：@a 是整束、$a[i] 是元素、$#a 是末位下标、scalar 是长度
my @arr = (10, 20, 30);
push @arr, 40;
unshift @arr, 5;
print "len=", scalar(@arr), " last=", $#arr, " [1]=", $arr[1], "\n";
print "join=", join(",", @arr), " pop=", pop(@arr), " shift=", shift(@arr), "\n";

# ④ 哈希：%h 是整束、$h{k} 是值、exists / delete
my %score = ("ada" => 92, "bob" => 78);
$score{"cy"} = 85;
print "bob=", $score{bob}, " keys=", scalar(keys %score), " has-ada=", exists($score{ada}) ? 1 : 0, "\n";
delete($score{ada});
print "after-delete keys=", scalar(keys %score), "\n";

# ⑤ 控制流：if / elsif / else、while、until、unless、C 风格 for、last / next
my $n = 3;
if ($n == 1) { print "one\n"; }
elsif ($n == 3) { print "three\n"; }
else { print "other\n"; }

unless ($n == 0) { print "nonzero\n"; }

my $i = 0;
while ($i < 3) { $i++; }
print "while i=$i\n";

my $t = 0;
for (my $k = 0; $k < 10; $k++) {
    next if ($k == 2);
    last if ($k == 6);
    $t += $k;
}
print "for t=$t\n";

# ⑥ 子程序：`my (…) = @_;` 取实参、return 返回；先调用后定义也行
sub fib { my ($n) = @_; if ($n < 2) { return $n; } return fib($n - 1) + fib($n - 2); }
print "fib(10)=", fib(10), "\n";

# ⑦ 字符串内置：length / substr / index / uc / lc / chomp / sprintf
my $s = "Hello, World";
print length($s), " ", substr($s, 7, 5), " ", index($s, "World"), " ", uc($s), "\n";
my $line = "trailing\n";
chomp($line);
print sprintf("[%s] %d", $line, length($line)), "\n";

# ⑧ 三目与逻辑短路（and / or / not 与 && / || / ! 两套都认）
my $big = ($a > 10) ? "big" : "small";
print $big, " ", (1 and 0) ? "T" : "F", (0 or 1) ? "T" : "F", (!0) ? "T" : "F", "\n";
