書式指定子に変数の値を用いる

行番号を表示するスクリプトを書いていて,行の桁数を揃えるために
printf関数などの書式指定子に変数の値を使いたいというシチュエーションになった
以下のように変数名を{}でくくれば大丈夫

my $line_number = 1;
my $digit_number = 3;

while(<IN>){
  printf("%${digit_number}d: ", $line_number++);
  print $_;
}


%02dとか,余っている桁に0を入れるような記述にしたらうまくいかなかった

例:
printf("%0${digit_number}d: ", $line_number++);

%をエスケープしてもダメ.指定したい場合はどうするんだろう?
上記の記述でうまく動作することを確認.sprintf関数がダメだったみたい.