12. MAIN
▸ ……
#!/usr/bin/env perl6
say "Hello Perl World! (before MAIN sub)";
sub MAIN() {
say "Hello Perl 6 World!";
}
say "Hello Perl World! (after MAIN sub)";
13. MAIN
▸
▸
MAIN
$ perl6 hello_world.p6
Hello Perl World! (before MAIN sub)
Hello Perl World! (after MAIN sub)
Hello Perl 6 World!
17. MAIN
▸ multi sub
#!/usr/bin/env perl6
multi sub MAIN(Int $num) {
say "num: $num";
}
multi sub MAIN(Str $str, Int $num) {
say "str: $str";
say "num: $num";
}
18. ▸ MAIN @*ARGS
#!/usr/bin/env perl6
sub MAIN(Str $str, Int $num) {
say "str: $str";
say "num: $num";
}
say @*ARGS.elems;
say @*ARGS.perl;
$ perl6 yapc.p6 YAPC 2019
2
["YAPC", "2019"]
str: YAPC
num: 2019
21. USAGE
▸
#!/usr/bin/env perl6
sub MAIN(Str $str, Int $num) {
say "str: $str";
say "num: $num";
}
sub USAGE() {
say "sub USAGE called.";
}
$ perl6 usage.p6
sub USAGE called.
22. USAGE
▸
▸
▸ :to
#!/usr/bin/env perl6
sub MAIN(Str $str, Int $num) {
say "str: $str";
say "num: $num";
}
sub USAGE() {
print q:to/END/;
Usage:
heredocs.p6 <str> <num>
please set "str" first.
END
}
23. USAGE
▸ Usage
▸ $*USAGE
#!/usr/bin/env perl6
sub MAIN(Str $str, Int $num) {
say "str: $str";
say "num: $num";
}
sub USAGE() {
say $*USAGE.perl;
}
$ perl6 var_usage.p6
"Usage:n var_usage.p6 <str> <num> "
24. USAGE
▸ Usage
▸
#!/usr/bin/env perl6
#| only 1 parameter
multi sub MAIN(Int $num) {
say "num: $num";
}
#| need 2 parameters, first parameter's type is Str, second is Int
multi sub MAIN(Str $str, Int $num) {
say "str: $str";
say "num: $num";
}
25. USAGE
▸ Usage
▸ MAIN Usage
$ perl6 declarator.p6
Usage:
declarator.p6 <num> -- only 1 parameter
declarator.p6 <str> <num> -- need 2 parameters, first parameter's
type is Str, second is Int
26. ▸ #|
▸ #|
▸ #=
▸ Perl 6 pod
#| only 1 parameter
multi sub MAIN(Int $num) {
say "num: $num";
}
34. ▸
▸ IO lines
for "README.md".IO.lines -> $line {
say $line;
}
my $fh = open "README.md";
for $fh.lines -> $line {
say $line;
}
$fh.close;
35. ▸ "README.md".IO
▸ .IO
IO::Path
▸ IO::Path.new("README.md")
#!/usr/bin/env perl6
my $fh = open "README.md";
say $fh.perl; # IO::Handle
say $fh.IO.perl; # IO::Path
say "README.md".perl; # Str
say "README.md".IO.perl; # IO::Path
36. IO::Path
▸ path
#!/usr/bin/env perl6
my $readme = "README.md".IO;
say $readme.perl;
say $readme.CWD; # get absolute path
say $readme.path; # get relative path
say $readme.basename; # get file name
say $readme.extension; # get extension
say $readme.dirname; # get directory by relative path
say $readme.e; # exist?
say $readme.d; # directory?
say $readme.f; # file?
say $readme.s; # size