Setting filename in BEGIN

BEGIN ブロックで filename を指定できるかという件です。

BEGIN {
      ARGV[1]="filename"
}                                                                                            
{ print $0 }

で、やるとするなら、

BEGIN {
       ARGV[ARGC++]="filename"
}                                                                                            
{ print $0 }

なんですが、こうしないと結局標準入力が優先されてしまうようです。
でも、これって BEGIN ブロックで、

BEGIN {
  InFile = "filename";
  while ( getline < InFile > 0 ) {
    ほんにゃらら;
  }
}

というのがスマートだと思いますけどね。