local our $hoge;

ブームに乗るぞ!かなり適当。

ourはstrict使用時にグローバル変数を使えるようにする宣言と覚えると楽。

だってほら、use strictしてるとグローバル変数つかえないだしょ?
いちいち$Foo::Bar::bazとかパッケージ明示して書くのも面倒だし。
そこでour $bazですよ。

localはグローバル変数(もしくはハッシュの一部)を一時的に変更する宣言。
なにが便利かっていうとスコープ抜けたら元の値に戻ることが保障されてるってところか。
そーゆー処理を自分で実装しようとするとかなり面倒だモンね。

 my $hash = { hoge => 1 };
 {
     my $temp = $hash->{hoge};
     $hash->{hoge} = 10;
     eval {
         hogehoge();
     };
     if ($@) {
         $hash->{hoge} = $temp;
         die $@;
     }
     $hash->{hoge} = $temp;
 }

こーんな処理が

 my $hash = { hoge => 1 };
 {
     local $hash->{hoge} = 10;
     hogehoge();
 }

こー書けちゃうわけですから。
使わない手はない。

# ちなみに上記処理はlocalの挙動の例を示しただけなので処理としては何の意味も無い

これらを理解したならタイトルの「local our $hoge」がなぜ正しいか納得いくでしょ?

myは(ry