4

このPerlプログラムを作成しようとしています:

#!/usr/bin/perl

use strict;
use warnings;

open(my $fh, "<", "test.txt")
    or die "cannot open < file name: $!";

while (my $line = <$fh>) {
    print $line;
}

close($fh);

この組織ファイルを作成しました:

#+BABEL: :cache yes :tangle yes :noweb yes

#+NAME: top_block
#+begin_src perl :tangle test.pl
  #!/usr/bin/perl

  use strict;
  use warnings;

  open(my $fh, "<", "test.txt")
      or die "cannot open < file name: $!";
  <<output all the lines from file>>
  close($fh);
#+end_src

#+NAME: output all the lines from file
#+begin_src perl :tangle test.pl
  while (my $line = <$fh>) {
      print $line;
  }
#+end_src

しかし、それはこれを作成しました:

empty line here
#!/usr/bin/perl

use strict;
use warnings;

open(my $fh, "<", "test.txt")
    or die "cannot open < file name: $!";
<<output all the lines from file>>
close($fh);

while (my $line = <$fh>) {
    print $line;
}

問題:

  1. ファイルの先頭に空の行があります。
  2. Noweb ブロックは展開されませんでしたが、ファイルの一番下に配置されました。
  3. よくわからない、出力ファイル名を一番上に一度書く方法は?現在、ブロックごとに書き直す必要があります: :tangle test.pl.
4

1 に答える 1

4

解決策は次のとおりです。

#+BABEL: :cache yes :tangle yes :noweb yes

#+NAME: top_block
#+begin_src perl :tangle "test.pl" :noweb tangle :shebang #!/usr/bin/perl
  use strict;
  use warnings;

  open(my $fh, "<", "test.txt")
      or die "cannot open < file name: $!";
  <<output-all>>
  close($fh);
#+end_src

#+NAME: output-all
#+begin_src perl
  while (my $line = <$fh>) {
      print $line;
  }
#+end_src
  1. #!/usr/bin/perl一番上の行に置くには:shebang #!/usr/bin/perl
  2. Noweb ブロックの名前にスペースを含めないでください。それらを「-」に置き換えます。
  3. ルート noweb ブロックのファイル名を記述します。
于 2014-10-22T08:20:26.620 に答える