======================================================================
 Modern::Open áá»ááºáá¾ááºá¸áááºá¸áá½á¾ááº [MY] áá¼ááºáá¬áá¬áá¬
======================================================================

[ 1. Installation / [MY] áá¼ááºáá¬áá¬áá¬ ]

  ááá·áºáá½ááºá¸áá«:
    cpan Modern::Open

  script áá½ááºá¡áá¯á¶á¸áá¼á¯áá«:
    use Modern::Open;

  á¡áá»á­á¯á¸áááºáá±á¬ááºáá¾á¯: open(), opendir(), sysopen(), pipe(), socket(),
                     áá¾áá·áº accept() áá­á¯ autovivification + autodie áá¬á¸áá¾ááºá¸áá¼áá·áº
                     á¡áá¬á¸áá­á¯á¸áááºá Perl 5.005_03 áá¾áá·áºáá±á¬ááºáá­á¯ááºá¸áá¬á¸áá¾ááºá¸áá»á¬á¸áá½ááº
                     မှတ်ချက်: socket() သည် autovivification ကိုထောက်ပံ့သော်လည်း autodie မပြုလုပ်ပါ။
                     á¡áá¯ááºáá¯ááºáááºá

[ 2. open() -- 2-arg ]

  my $fh;
  open($fh, "< file.txt");   # áááºáá«
  open($fh, "> file.txt");   # áá±á¸áá« (override)
  open($fh, ">> file.txt");  # áááºáá¼áá·áºáá«
  open($fh, "+< file.txt");  # áááº/áá±á¸
  open($fh, "cmd |");        # command pipe áá¾áááºáá«
  open($fh, "| cmd");        # command pipe áá­á¯á·áá±á¸áá«

  while (my $line = readline($fh)) { ... }
  print $fh "text\n";
  close($fh);

[ 3. open() -- 3-arg ]

  my $fh;
  open($fh, '<',  "file.txt");   # áááºáá«
  open($fh, '>',  "file.txt");   # áá±á¸áá« (override)
  open($fh, '>>', "file.txt");   # áááºáá¼áá·áºáá«
  open($fh, '+<', "file.txt");   # áááº/áá±á¸
  open($fh, '+>', "file.txt");   # áááº/áá±á¸ (override)
  open($fh, '-|', "cmd");        # command pipe áá¾áááºáá«
  open($fh, '|-', "cmd");        # command pipe áá­á¯á·áá±á¸áá«

[ 4. opendir() ]

  my $dh;
  opendir($dh, "/path/to/dir");
  while (my $e = readdir($dh)) {
      next if $e eq '.' or $e eq '..';
      print "$e\n";
  }
  closedir($dh);

[ 5. sysopen() ]

  use Fcntl qw(O_RDONLY O_WRONLY O_CREAT O_TRUNC);

  my $fh;
  sysopen($fh, "file.txt", O_RDONLY);
  sysopen($fh, "file.txt", O_WRONLY | O_CREAT | O_TRUNC);
  sysopen($fh, "file.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);

[ 6. pipe() ]

  my($reader, $writer);
  pipe($reader, $writer);
  if (my $pid = fork()) {
      close($writer);
      while (my $line = readline($reader)) { print $line }
      close($reader);
  } else {
      close($reader);
      print $writer "child process áá¾ áááºá¹ááá¬áá«\n";
      close($writer);
      exit 0;
  }

[ 7. socket() / accept() ]

  use Socket qw(AF_INET SOCK_STREAM sockaddr_in inet_aton);
  my $server;
  socket($server, AF_INET, SOCK_STREAM, 0);
  # မှတ်ချက်: socket() သည် autodie မပြုလုပ်ပါ; return value ကိုကိုယ်တိုင်စစ်ဆေးပါ။
  my $client;
  accept($client, $server);

[ 8. autodie ]

  # void context: áá¡á±á¬ááºáá¼ááºáá«á die
  open($fh, "< no_such_file.txt");   # dies: Can't open(...)

  # return value áá¼áá·áº: áá¡á±á¬ááºáá¼ááºáá«á undef/0
  my $rc = open($fh, "< file.txt");
  unless ($rc) { warn "open áá¡á±á¬ááºáá¼ááºáá«: $!" }

  open(FILE, "< file.txt");   # dies: Bare handle no longer supported

[ 9. Handle ]

  readline($fh)        # áááºáá¼á±á¬ááºá¸áááºáá«
  read($fh, $buf, $n)  # N byte áááºáá«
  print $fh "..."      # áá±á¸áá«
  binmode($fh)         # binary mode
  seek($fh, 0, 0)      # á¡ááá­á¯á·áá½á¬á¸áá«
  tell($fh)            # áááºáá¾á­áá±áá¬
  close($fh)           # áá­ááºáá«
  eof($fh)             # áá­á¯ááºá¡áá¯á¶á¸áááºáá±á¸áá«

[ 10. Compatibility ]

  Perl áá¬á¸áá¾ááºá¸ : 5.005_03 áá¾áá·áºá¡áááº (5.42 á¡áá«á¡áááº)
  ááááºáá±á¬ááºá¸   : Unix, Linux, macOS, Windows (CRLF á¡áá­á¯á¡áá»á±á¬ááº)
  áá¾á®áá­á¯áá¾á¯      : Fcntl (core module)

[ 11. Official resources ]

  Modern::Open (MetaCPAN):
    https://metacpan.org/dist/Modern-Open

  INABA Hitoshi (ina) on CPAN:
    https://metacpan.org/author/INA

======================================================================
