変数を吸い込んで関数は動くのだけれど読みにくいです

perlを書くけど会社の先人たちのコードに四苦八苦しています。

#例1
#! /usr/bin/env perl

my $val = 1;

hoge();

$val = 2;

hoge();

sub hoge {
  print $val . "\n";
}

関数内で引数取り込まないのやめてほしい。
呼び出し時のスコープの変数をもって関数は呼び出される。
呼び出し時から上に遡って変数を確認しないといけない。

やっぱperl気持ち悪い。perlが気持ち悪いんじゃなくて会社のperlerの自信過剰というか
バグになりそうな書き方は極力避ける、自分は忘却する、ってことを意識しない書き方が気持ち悪い気がする。

僕は知能弱いので脳内バッファ小さいです。なので呼び出し時の変数を持って関数がキックされるとかされると脳内に変数のテーブル持たなくちゃいけないのですぐしんどくなります。

なんかこういうperlってうわぁーーって興奮してかいている気がするのね。プログラマなのでうわぁーって大事なんだろうけどオナニー見せられているみたいで成果物って感じがしない。
perlってその場しのぎの文化なのか?と思う。スクリプト言語なのでその場しのぎでも仕方がないのでしょうけどそれでも。

あとテスト書け。テスト書かないなら仕様書け。
あとuse strict; use warnings;してくれ。
あと共通的に使う関数はモジュールにまとめてファイルにしてuseしてくれ。全部のファイルに同じ関数が定義されているこの変数がすべて同じ保証はない。結局全部の処理を見なおさないといけなくなる。
あとコメント書いてくれ。関数の頭に「# ○○する」みたいなコメント入れるだけで随分違う。
WEBページなら画面がうまく表示されれば正解なのだろうけどそれ以外なら抽象的なのでぶっちゃけ何してるか読んでる人はわかりづらい。関数名もっと工夫するとか。
変更箇所が「無駄に」多すぎる。もっとシンプルに書けると思うのだけれど。

だいぶストレス溜まっている。
例2のような眠くて仕事する気おきない僕のようなアホな人間でもわかるように書いてほしい

#例2
#! /usr/bin/env perl
use strict;
use warnings;

# ○○の状態を管理する
my $var = 1;

# ○○について○○する
fuga($val);
fuga($val);
fuga($val);

# 状態が変わった
$var = 2;

# ○○について○○する
fuga($val);

# ○○する
sub fuga {
  my $var = shift;
  print $val . "\n";
}