別に>>980でもいいんじゃないかと思うが

print +($str =~ /\G.*\n/g)[0..$n-1];

ついでに質問だが、実行フェーズでグローバルでリードオンリーな定数定義する方法
にはどんなのがありますか?

BEGIN { *HOGE = sub () { } }
$hoge = get_hoge();
no warnings 'redefine';
*HOGE = sub () { $hoge };

これをもう少しスマートに書きたい