[INFO] fetching crate oak-perl 0.0.11... [INFO] testing oak-perl-0.0.11 against try#dec9417b8611e34e787a3e4c37686b5131f9e5c5 for pr-154210-2 [INFO] extracting crate oak-perl 0.0.11 into /workspace/builds/worker-4-tc2/source [INFO] started tweaking crates.io crate oak-perl 0.0.11 [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate oak-perl 0.0.11 [INFO] tweaked toml for crates.io crate oak-perl 0.0.11 written to /workspace/builds/worker-4-tc2/source/Cargo.toml [INFO] validating manifest of crates.io crate oak-perl 0.0.11 on toolchain dec9417b8611e34e787a3e4c37686b5131f9e5c5 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate oak-perl 0.0.11 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] d8cddd3be1259fa8f8aea820ff315b5d2834eeafd974184f328ac258393c9856 [INFO] running `Command { std: "docker" "start" "-a" "d8cddd3be1259fa8f8aea820ff315b5d2834eeafd974184f328ac258393c9856", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "d8cddd3be1259fa8f8aea820ff315b5d2834eeafd974184f328ac258393c9856", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "d8cddd3be1259fa8f8aea820ff315b5d2834eeafd974184f328ac258393c9856", kill_on_drop: false }` [INFO] [stdout] d8cddd3be1259fa8f8aea820ff315b5d2834eeafd974184f328ac258393c9856 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 0e502f2d38a4a15259d00c2f31e2b95ff35d85655831eee262cd1cebf683fd9c [INFO] running `Command { std: "docker" "start" "-a" "0e502f2d38a4a15259d00c2f31e2b95ff35d85655831eee262cd1cebf683fd9c", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.182 [INFO] [stderr] Compiling zerocopy v0.8.40 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling smallvec v1.15.1 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Compiling rand_core v0.9.5 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling rand_chacha v0.9.0 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling rand v0.9.2 [INFO] [stderr] Compiling twox-hash v2.1.2 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling triomphe v0.1.15 [INFO] [stderr] Compiling oak-core v0.0.11 [INFO] [stderr] Compiling oak-perl v0.0.11 (/opt/rustwide/workdir) [INFO] [stdout] warning: feature `new_range_api` is declared but not used [INFO] [stdout] --> src/lib.rs:2:12 [INFO] [stdout] | [INFO] [stdout] 2 | #![feature(new_range_api)] [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_features)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 17.35s [INFO] running `Command { std: "docker" "inspect" "0e502f2d38a4a15259d00c2f31e2b95ff35d85655831eee262cd1cebf683fd9c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0e502f2d38a4a15259d00c2f31e2b95ff35d85655831eee262cd1cebf683fd9c", kill_on_drop: false }` [INFO] [stdout] 0e502f2d38a4a15259d00c2f31e2b95ff35d85655831eee262cd1cebf683fd9c [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 0e39536ef3bb245cd25a1c04d8ea3a9868aa51020762a07ca05f1b1a01dbd644 [INFO] running `Command { std: "docker" "start" "-a" "0e39536ef3bb245cd25a1c04d8ea3a9868aa51020762a07ca05f1b1a01dbd644", kill_on_drop: false }` [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stdout] warning: feature `new_range_api` is declared but not used [INFO] [stdout] --> src/lib.rs:2:12 [INFO] [stdout] | [INFO] [stdout] 2 | #![feature(new_range_api)] [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_features)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Compiling oak-testing v0.0.11 [INFO] [stderr] Compiling oak-perl v0.0.11 (/opt/rustwide/workdir) [INFO] [stdout] warning: feature `new_range_api` is declared but not used [INFO] [stdout] --> src/lib.rs:2:12 [INFO] [stdout] | [INFO] [stdout] 2 | #![feature(new_range_api)] [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_features)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 3.95s [INFO] running `Command { std: "docker" "inspect" "0e39536ef3bb245cd25a1c04d8ea3a9868aa51020762a07ca05f1b1a01dbd644", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0e39536ef3bb245cd25a1c04d8ea3a9868aa51020762a07ca05f1b1a01dbd644", kill_on_drop: false }` [INFO] [stdout] 0e39536ef3bb245cd25a1c04d8ea3a9868aa51020762a07ca05f1b1a01dbd644 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 74928fe1803e7a3781d179505e9281af48464014f34f28881d550ebd68d89198 [INFO] running `Command { std: "docker" "start" "-a" "74928fe1803e7a3781d179505e9281af48464014f34f28881d550ebd68d89198", kill_on_drop: false }` [INFO] [stderr] warning: feature `new_range_api` is declared but not used [INFO] [stderr] --> src/lib.rs:2:12 [INFO] [stderr] | [INFO] [stderr] 2 | #![feature(new_range_api)] [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_features)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: `oak-perl` (lib) generated 1 warning [INFO] [stderr] warning: `oak-perl` (lib test) generated 1 warning (1 duplicate) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.15s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/oak_perl-feda3cf1da1bc5da) [INFO] [stderr] Running tests/main.rs (/opt/rustwide/target/debug/deps/main-bdba84b1e4b1e9d0) [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 2 tests [INFO] [stdout] test ready ... ok [INFO] [stdout] test lexer::test_perl_lexer ... FAILED [INFO] [stdout] [INFO] [stdout] failures: [INFO] [stdout] [INFO] [stdout] ---- lexer::test_perl_lexer stdout ---- [INFO] [stdout] Testing file: /opt/rustwide/workdir/tests/lexer/basic.pl [INFO] [stdout] Error: TestFailure { path: "/opt/rustwide/workdir/tests/lexer/basic.pl", expected: "LexerTestExpected {\n success: true,\n count: 100,\n tokens: [\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 17,\n end: 20,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"strict\",\n start: 21,\n end: 27,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 27,\n end: 28,\n },\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 30,\n end: 33,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"warnings\",\n start: 34,\n end: 42,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 42,\n end: 43,\n },\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 45,\n end: 48,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"feature\",\n start: 49,\n end: 56,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"'say'\",\n start: 57,\n end: 62,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 62,\n end: 63,\n },\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 65,\n end: 68,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Data\",\n start: 69,\n end: 73,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 73,\n end: 74,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 74,\n end: 75,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Dumper\",\n start: 75,\n end: 81,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 81,\n end: 82,\n },\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 84,\n end: 87,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"List\",\n start: 88,\n end: 92,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 92,\n end: 93,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 93,\n end: 94,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Util\",\n start: 94,\n end: 98,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"qw\",\n start: 99,\n end: 101,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 101,\n end: 102,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"sum\",\n start: 102,\n end: 105,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"max\",\n start: 106,\n end: 109,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"min\",\n start: 110,\n end: 113,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"first\",\n start: 114,\n end: 119,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 119,\n end: 120,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 120,\n end: 121,\n },\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 123,\n end: 126,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Scalar\",\n start: 127,\n end: 133,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 133,\n end: 134,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 134,\n end: 135,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Util\",\n start: 135,\n end: 139,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"qw\",\n start: 140,\n end: 142,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 142,\n end: 143,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"looks_like_number\",\n start: 143,\n end: 160,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"blessed\",\n start: 161,\n end: 168,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 168,\n end: 169,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 169,\n end: 170,\n },\n TokenData {\n kind: \"Package\",\n text: \"package\",\n start: 196,\n end: 203,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Person\",\n start: 204,\n end: 210,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 210,\n end: 211,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 215,\n end: 218,\n },\n TokenData {\n kind: \"New\",\n text: \"new\",\n start: 219,\n end: 222,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 223,\n end: 224,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 230,\n end: 232,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 233,\n end: 234,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$class\",\n start: 234,\n end: 240,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 240,\n end: 241,\n },\n TokenData {\n kind: \"Percent_\",\n text: \"%args\",\n start: 242,\n end: 247,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 247,\n end: 248,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 249,\n end: 250,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 251,\n end: 253,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 253,\n end: 254,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 260,\n end: 262,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 263,\n end: 268,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 269,\n end: 270,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 271,\n end: 272,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 282,\n end: 286,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 287,\n end: 288,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 288,\n end: 289,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$args\",\n start: 290,\n end: 295,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 295,\n end: 296,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 296,\n end: 300,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 300,\n end: 301,\n },\n TokenData {\n kind: \"LogicalOr\",\n text: \"||\",\n start: 302,\n end: 304,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"'Unknown'\",\n start: 305,\n end: 314,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 314,\n end: 315,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 325,\n end: 328,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 330,\n end: 331,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 331,\n end: 332,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$args\",\n start: 333,\n end: 338,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 338,\n end: 339,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 339,\n end: 342,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 342,\n end: 343,\n },\n TokenData {\n kind: \"LogicalOr\",\n text: \"||\",\n start: 345,\n end: 347,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"0\",\n start: 348,\n end: 349,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 349,\n end: 350,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"email\",\n start: 360,\n end: 365,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 366,\n end: 367,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 367,\n end: 368,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$args\",\n start: 369,\n end: 374,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 374,\n end: 375,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"email\",\n start: 375,\n end: 380,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 380,\n end: 381,\n },\n TokenData {\n kind: \"LogicalOr\",\n text: \"||\",\n start: 382,\n end: 384,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"''\",\n start: 385,\n end: 387,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 387,\n end: 388,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 394,\n end: 395,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 395,\n end: 396,\n },\n TokenData {\n kind: \"Bless\",\n text: \"bless\",\n start: 402,\n end: 407,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 408,\n end: 413,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 413,\n end: 414,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$class\",\n start: 415,\n end: 421,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 421,\n end: 422,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 428,\n end: 434,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 435,\n end: 440,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 440,\n end: 441,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 443,\n end: 444,\n },\n ],\n errors: [],\n}", actual: "LexerTestExpected {\n success: true,\n count: 2020,\n tokens: [\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 17,\n end: 20,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"strict\",\n start: 21,\n end: 27,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 27,\n end: 28,\n },\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 30,\n end: 33,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"warnings\",\n start: 34,\n end: 42,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 42,\n end: 43,\n },\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 45,\n end: 48,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"feature\",\n start: 49,\n end: 56,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"'say'\",\n start: 57,\n end: 62,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 62,\n end: 63,\n },\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 65,\n end: 68,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Data\",\n start: 69,\n end: 73,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 73,\n end: 74,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 74,\n end: 75,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Dumper\",\n start: 75,\n end: 81,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 81,\n end: 82,\n },\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 84,\n end: 87,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"List\",\n start: 88,\n end: 92,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 92,\n end: 93,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 93,\n end: 94,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Util\",\n start: 94,\n end: 98,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"qw\",\n start: 99,\n end: 101,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 101,\n end: 102,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"sum\",\n start: 102,\n end: 105,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"max\",\n start: 106,\n end: 109,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"min\",\n start: 110,\n end: 113,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"first\",\n start: 114,\n end: 119,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 119,\n end: 120,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 120,\n end: 121,\n },\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 123,\n end: 126,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Scalar\",\n start: 127,\n end: 133,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 133,\n end: 134,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 134,\n end: 135,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Util\",\n start: 135,\n end: 139,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"qw\",\n start: 140,\n end: 142,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 142,\n end: 143,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"looks_like_number\",\n start: 143,\n end: 160,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"blessed\",\n start: 161,\n end: 168,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 168,\n end: 169,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 169,\n end: 170,\n },\n TokenData {\n kind: \"Package\",\n text: \"package\",\n start: 196,\n end: 203,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Person\",\n start: 204,\n end: 210,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 210,\n end: 211,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 215,\n end: 218,\n },\n TokenData {\n kind: \"New\",\n text: \"new\",\n start: 219,\n end: 222,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 223,\n end: 224,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 230,\n end: 232,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 233,\n end: 234,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$class\",\n start: 234,\n end: 240,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 240,\n end: 241,\n },\n TokenData {\n kind: \"Percent_\",\n text: \"%args\",\n start: 242,\n end: 247,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 247,\n end: 248,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 249,\n end: 250,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 251,\n end: 253,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 253,\n end: 254,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 260,\n end: 262,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 263,\n end: 268,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 269,\n end: 270,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 271,\n end: 272,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 282,\n end: 286,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 287,\n end: 288,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 288,\n end: 289,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$args\",\n start: 290,\n end: 295,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 295,\n end: 296,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 296,\n end: 300,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 300,\n end: 301,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 302,\n end: 303,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 303,\n end: 304,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"'Unknown'\",\n start: 305,\n end: 314,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 314,\n end: 315,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 325,\n end: 328,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 330,\n end: 331,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 331,\n end: 332,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$args\",\n start: 333,\n end: 338,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 338,\n end: 339,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 339,\n end: 342,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 342,\n end: 343,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 345,\n end: 346,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 346,\n end: 347,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"0\",\n start: 348,\n end: 349,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 349,\n end: 350,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"email\",\n start: 360,\n end: 365,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 366,\n end: 367,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 367,\n end: 368,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$args\",\n start: 369,\n end: 374,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 374,\n end: 375,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"email\",\n start: 375,\n end: 380,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 380,\n end: 381,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 382,\n end: 383,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 383,\n end: 384,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"''\",\n start: 385,\n end: 387,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 387,\n end: 388,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 394,\n end: 395,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 395,\n end: 396,\n },\n TokenData {\n kind: \"Bless\",\n text: \"bless\",\n start: 402,\n end: 407,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 408,\n end: 413,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 413,\n end: 414,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$class\",\n start: 415,\n end: 421,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 421,\n end: 422,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 428,\n end: 434,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 435,\n end: 440,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 440,\n end: 441,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 443,\n end: 444,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 448,\n end: 451,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"get_name\",\n start: 452,\n end: 460,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 461,\n end: 462,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 468,\n end: 470,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 471,\n end: 476,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 477,\n end: 478,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 479,\n end: 484,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 484,\n end: 485,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 491,\n end: 497,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 498,\n end: 503,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 503,\n end: 505,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 505,\n end: 506,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 506,\n end: 510,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 510,\n end: 511,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 511,\n end: 512,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 514,\n end: 515,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 519,\n end: 522,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"set_name\",\n start: 523,\n end: 531,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 532,\n end: 533,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 539,\n end: 541,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 542,\n end: 543,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 543,\n end: 548,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 548,\n end: 549,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$name\",\n start: 550,\n end: 555,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 555,\n end: 556,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 557,\n end: 558,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 559,\n end: 561,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 561,\n end: 562,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 568,\n end: 573,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 573,\n end: 575,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 575,\n end: 576,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 576,\n end: 580,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 580,\n end: 581,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 582,\n end: 583,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$name\",\n start: 584,\n end: 589,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 589,\n end: 590,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 592,\n end: 593,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 597,\n end: 600,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"get_age\",\n start: 601,\n end: 608,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 609,\n end: 610,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 616,\n end: 618,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 619,\n end: 624,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 625,\n end: 626,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 627,\n end: 632,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 632,\n end: 633,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 639,\n end: 645,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 646,\n end: 651,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 651,\n end: 653,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 653,\n end: 654,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 654,\n end: 657,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 657,\n end: 658,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 658,\n end: 659,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 661,\n end: 662,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 666,\n end: 669,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"set_age\",\n start: 670,\n end: 677,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 678,\n end: 679,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 685,\n end: 687,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 688,\n end: 689,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 689,\n end: 694,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 694,\n end: 695,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$age\",\n start: 696,\n end: 700,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 700,\n end: 701,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 702,\n end: 703,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 704,\n end: 706,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 706,\n end: 707,\n },\n TokenData {\n kind: \"If\",\n text: \"if\",\n start: 713,\n end: 715,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 716,\n end: 717,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"looks_like_number\",\n start: 717,\n end: 734,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 734,\n end: 735,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$age\",\n start: 735,\n end: 739,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 739,\n end: 740,\n },\n TokenData {\n kind: \"BitwiseAnd\",\n text: \"&\",\n start: 741,\n end: 742,\n },\n TokenData {\n kind: \"BitwiseAnd\",\n text: \"&\",\n start: 742,\n end: 743,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$age\",\n start: 744,\n end: 748,\n },\n TokenData {\n kind: \"GreaterEqual\",\n text: \">=\",\n start: 749,\n end: 751,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"0\",\n start: 752,\n end: 753,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 753,\n end: 754,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 755,\n end: 756,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 766,\n end: 771,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 771,\n end: 773,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 773,\n end: 774,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 774,\n end: 777,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 777,\n end: 778,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 779,\n end: 780,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$age\",\n start: 781,\n end: 785,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 785,\n end: 786,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 792,\n end: 793,\n },\n TokenData {\n kind: \"Else\",\n text: \"else\",\n start: 794,\n end: 798,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 799,\n end: 800,\n },\n TokenData {\n kind: \"Die\",\n text: \"die\",\n start: 810,\n end: 813,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Invalid age: $age\\\"\",\n start: 814,\n end: 833,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 833,\n end: 834,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 840,\n end: 841,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 843,\n end: 844,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 848,\n end: 851,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"get_email\",\n start: 852,\n end: 861,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 862,\n end: 863,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 869,\n end: 871,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 872,\n end: 877,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 878,\n end: 879,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 880,\n end: 885,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 885,\n end: 886,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 892,\n end: 898,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 899,\n end: 904,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 904,\n end: 906,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 906,\n end: 907,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"email\",\n start: 907,\n end: 912,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 912,\n end: 913,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 913,\n end: 914,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 916,\n end: 917,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 921,\n end: 924,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"set_email\",\n start: 925,\n end: 934,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 935,\n end: 936,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 942,\n end: 944,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 945,\n end: 946,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 946,\n end: 951,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 951,\n end: 952,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$email\",\n start: 953,\n end: 959,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 959,\n end: 960,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 961,\n end: 962,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 963,\n end: 965,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 965,\n end: 966,\n },\n TokenData {\n kind: \"If\",\n text: \"if\",\n start: 972,\n end: 974,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 975,\n end: 976,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$email\",\n start: 976,\n end: 982,\n },\n TokenData {\n kind: \"Match\",\n text: \"=~\",\n start: 983,\n end: 985,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 986,\n end: 987,\n },\n TokenData {\n kind: \"BitwiseXor\",\n text: \"^\",\n start: 987,\n end: 988,\n },\n TokenData {\n kind: \"LeftBracket\",\n text: \"[\",\n start: 988,\n end: 989,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"a\",\n start: 989,\n end: 990,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 990,\n end: 991,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"zA\",\n start: 991,\n end: 993,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 993,\n end: 994,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Z0\",\n start: 994,\n end: 996,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 996,\n end: 997,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"9.\",\n start: 997,\n end: 999,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"_\",\n start: 999,\n end: 1000,\n },\n TokenData {\n kind: \"Percent_\",\n text: \"%\",\n start: 1000,\n end: 1001,\n },\n TokenData {\n kind: \"Plus\",\n text: \"+\",\n start: 1001,\n end: 1002,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 1002,\n end: 1003,\n },\n TokenData {\n kind: \"RightBracket\",\n text: \"]\",\n start: 1003,\n end: 1004,\n },\n TokenData {\n kind: \"Plus\",\n text: \"+\",\n start: 1004,\n end: 1005,\n },\n TokenData {\n kind: \"At\",\n text: \"@\",\n start: 1005,\n end: 1006,\n },\n TokenData {\n kind: \"LeftBracket\",\n text: \"[\",\n start: 1006,\n end: 1007,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"a\",\n start: 1007,\n end: 1008,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 1008,\n end: 1009,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"zA\",\n start: 1009,\n end: 1011,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 1011,\n end: 1012,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Z0\",\n start: 1012,\n end: 1014,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 1014,\n end: 1015,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"9.\",\n start: 1015,\n end: 1017,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 1017,\n end: 1018,\n },\n TokenData {\n kind: \"RightBracket\",\n text: \"]\",\n start: 1018,\n end: 1019,\n },\n TokenData {\n kind: \"Plus\",\n text: \"+\",\n start: 1019,\n end: 1020,\n },\n TokenData {\n kind: \"Error\",\n text: \"\\\\\",\n start: 1020,\n end: 1021,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 1021,\n end: 1022,\n },\n TokenData {\n kind: \"LeftBracket\",\n text: \"[\",\n start: 1022,\n end: 1023,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"a\",\n start: 1023,\n end: 1024,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 1024,\n end: 1025,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"zA\",\n start: 1025,\n end: 1027,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 1027,\n end: 1028,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Z\",\n start: 1028,\n end: 1029,\n },\n TokenData {\n kind: \"RightBracket\",\n text: \"]\",\n start: 1029,\n end: 1030,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1030,\n end: 1031,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"2\",\n start: 1031,\n end: 1032,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 1032,\n end: 1033,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1033,\n end: 1034,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$\",\n start: 1034,\n end: 1035,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 1035,\n end: 1036,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 1036,\n end: 1037,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1038,\n end: 1039,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1049,\n end: 1054,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 1054,\n end: 1056,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1056,\n end: 1057,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"email\",\n start: 1057,\n end: 1062,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1062,\n end: 1063,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 1064,\n end: 1065,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$email\",\n start: 1066,\n end: 1072,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1072,\n end: 1073,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1079,\n end: 1080,\n },\n TokenData {\n kind: \"Else\",\n text: \"else\",\n start: 1081,\n end: 1085,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1086,\n end: 1087,\n },\n TokenData {\n kind: \"Die\",\n text: \"die\",\n start: 1097,\n end: 1100,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Invalid email format: $email\\\"\",\n start: 1101,\n end: 1131,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1131,\n end: 1132,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1138,\n end: 1139,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1141,\n end: 1142,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 1146,\n end: 1149,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"to_string\",\n start: 1150,\n end: 1159,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1160,\n end: 1161,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 1167,\n end: 1169,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1170,\n end: 1175,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 1176,\n end: 1177,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 1178,\n end: 1183,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1183,\n end: 1184,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 1190,\n end: 1196,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"sprintf\",\n start: 1197,\n end: 1204,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 1204,\n end: 1205,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Person(name='%s', age=%d, email='%s')\\\"\",\n start: 1205,\n end: 1244,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 1244,\n end: 1245,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1267,\n end: 1272,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 1272,\n end: 1274,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1274,\n end: 1275,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 1275,\n end: 1279,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1279,\n end: 1280,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 1280,\n end: 1281,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1282,\n end: 1287,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 1287,\n end: 1289,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1289,\n end: 1290,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 1290,\n end: 1293,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1293,\n end: 1294,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 1294,\n end: 1295,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1296,\n end: 1301,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 1301,\n end: 1303,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1303,\n end: 1304,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"email\",\n start: 1304,\n end: 1309,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1309,\n end: 1310,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 1310,\n end: 1311,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1311,\n end: 1312,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1314,\n end: 1315,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 1319,\n end: 1322,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"is_adult\",\n start: 1323,\n end: 1331,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1332,\n end: 1333,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 1339,\n end: 1341,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1342,\n end: 1347,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 1348,\n end: 1349,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 1350,\n end: 1355,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1355,\n end: 1356,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 1362,\n end: 1368,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1369,\n end: 1374,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 1374,\n end: 1376,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1376,\n end: 1377,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 1377,\n end: 1380,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1380,\n end: 1381,\n },\n TokenData {\n kind: \"GreaterEqual\",\n text: \">=\",\n start: 1382,\n end: 1384,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"18\",\n start: 1385,\n end: 1387,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1387,\n end: 1388,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1390,\n end: 1391,\n },\n TokenData {\n kind: \"Package\",\n text: \"package\",\n start: 1436,\n end: 1443,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Employee\",\n start: 1444,\n end: 1452,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1452,\n end: 1453,\n },\n TokenData {\n kind: \"Use\",\n text: \"use\",\n start: 1455,\n end: 1458,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"parent\",\n start: 1459,\n end: 1465,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"'Person'\",\n start: 1466,\n end: 1474,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1474,\n end: 1475,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 1479,\n end: 1482,\n },\n TokenData {\n kind: \"New\",\n text: \"new\",\n start: 1483,\n end: 1486,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1487,\n end: 1488,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 1494,\n end: 1496,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 1497,\n end: 1498,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$class\",\n start: 1498,\n end: 1504,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 1504,\n end: 1505,\n },\n TokenData {\n kind: \"Percent_\",\n text: \"%args\",\n start: 1506,\n end: 1511,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 1511,\n end: 1512,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 1513,\n end: 1514,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 1515,\n end: 1517,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1517,\n end: 1518,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 1524,\n end: 1526,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1527,\n end: 1532,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 1533,\n end: 1534,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$class\",\n start: 1535,\n end: 1541,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 1541,\n end: 1543,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"SUPER\",\n start: 1543,\n end: 1548,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 1548,\n end: 1549,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 1549,\n end: 1550,\n },\n TokenData {\n kind: \"New\",\n text: \"new\",\n start: 1550,\n end: 1553,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 1553,\n end: 1554,\n },\n TokenData {\n kind: \"Percent_\",\n text: \"%args\",\n start: 1554,\n end: 1559,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 1559,\n end: 1560,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1560,\n end: 1561,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1567,\n end: 1572,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 1572,\n end: 1574,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1574,\n end: 1575,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"employee_id\",\n start: 1575,\n end: 1586,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1586,\n end: 1587,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 1588,\n end: 1589,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$args\",\n start: 1590,\n end: 1595,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1595,\n end: 1596,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"employee_id\",\n start: 1596,\n end: 1607,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1607,\n end: 1608,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 1609,\n end: 1610,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 1610,\n end: 1611,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"0\",\n start: 1612,\n end: 1613,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1613,\n end: 1614,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1620,\n end: 1625,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 1625,\n end: 1627,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1627,\n end: 1628,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"department\",\n start: 1628,\n end: 1638,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1638,\n end: 1639,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 1640,\n end: 1641,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$args\",\n start: 1642,\n end: 1647,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1647,\n end: 1648,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"department\",\n start: 1648,\n end: 1658,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1658,\n end: 1659,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 1660,\n end: 1661,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 1661,\n end: 1662,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"'Unknown'\",\n start: 1663,\n end: 1672,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1672,\n end: 1673,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1679,\n end: 1684,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 1684,\n end: 1686,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1686,\n end: 1687,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"salary\",\n start: 1687,\n end: 1693,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1693,\n end: 1694,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 1695,\n end: 1696,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$args\",\n start: 1697,\n end: 1702,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1702,\n end: 1703,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"salary\",\n start: 1703,\n end: 1709,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1709,\n end: 1710,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 1711,\n end: 1712,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 1712,\n end: 1713,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"0\",\n start: 1714,\n end: 1715,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1715,\n end: 1716,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 1722,\n end: 1728,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1729,\n end: 1734,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1734,\n end: 1735,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1737,\n end: 1738,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 1742,\n end: 1745,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"get_employee_id\",\n start: 1746,\n end: 1761,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1762,\n end: 1763,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 1769,\n end: 1771,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1772,\n end: 1777,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 1778,\n end: 1779,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 1780,\n end: 1785,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1785,\n end: 1786,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 1792,\n end: 1798,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1799,\n end: 1804,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 1804,\n end: 1806,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1806,\n end: 1807,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"employee_id\",\n start: 1807,\n end: 1818,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1818,\n end: 1819,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1819,\n end: 1820,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1822,\n end: 1823,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 1827,\n end: 1830,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"get_department\",\n start: 1831,\n end: 1845,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1846,\n end: 1847,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 1853,\n end: 1855,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1856,\n end: 1861,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 1862,\n end: 1863,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 1864,\n end: 1869,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1869,\n end: 1870,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 1876,\n end: 1882,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1883,\n end: 1888,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 1888,\n end: 1890,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1890,\n end: 1891,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"department\",\n start: 1891,\n end: 1901,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1901,\n end: 1902,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1902,\n end: 1903,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1905,\n end: 1906,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 1910,\n end: 1913,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"set_department\",\n start: 1914,\n end: 1928,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1929,\n end: 1930,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 1936,\n end: 1938,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 1939,\n end: 1940,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1940,\n end: 1945,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 1945,\n end: 1946,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$department\",\n start: 1947,\n end: 1958,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 1958,\n end: 1959,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 1960,\n end: 1961,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 1962,\n end: 1964,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 1964,\n end: 1965,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 1971,\n end: 1976,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 1976,\n end: 1978,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 1978,\n end: 1979,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"department\",\n start: 1979,\n end: 1989,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 1989,\n end: 1990,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 1991,\n end: 1992,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$department\",\n start: 1993,\n end: 2004,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2004,\n end: 2005,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2007,\n end: 2008,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 2012,\n end: 2015,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"get_salary\",\n start: 2016,\n end: 2026,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2027,\n end: 2028,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 2034,\n end: 2036,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 2037,\n end: 2042,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2043,\n end: 2044,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 2045,\n end: 2050,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2050,\n end: 2051,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 2057,\n end: 2063,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 2064,\n end: 2069,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 2069,\n end: 2071,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2071,\n end: 2072,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"salary\",\n start: 2072,\n end: 2078,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2078,\n end: 2079,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2079,\n end: 2080,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2082,\n end: 2083,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 2087,\n end: 2090,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"set_salary\",\n start: 2091,\n end: 2101,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2102,\n end: 2103,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 2109,\n end: 2111,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 2112,\n end: 2113,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 2113,\n end: 2118,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2118,\n end: 2119,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$salary\",\n start: 2120,\n end: 2127,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 2127,\n end: 2128,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2129,\n end: 2130,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 2131,\n end: 2133,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2133,\n end: 2134,\n },\n TokenData {\n kind: \"If\",\n text: \"if\",\n start: 2140,\n end: 2142,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 2143,\n end: 2144,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"looks_like_number\",\n start: 2144,\n end: 2161,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 2161,\n end: 2162,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$salary\",\n start: 2162,\n end: 2169,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 2169,\n end: 2170,\n },\n TokenData {\n kind: \"BitwiseAnd\",\n text: \"&\",\n start: 2171,\n end: 2172,\n },\n TokenData {\n kind: \"BitwiseAnd\",\n text: \"&\",\n start: 2172,\n end: 2173,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$salary\",\n start: 2174,\n end: 2181,\n },\n TokenData {\n kind: \"GreaterEqual\",\n text: \">=\",\n start: 2182,\n end: 2184,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"0\",\n start: 2185,\n end: 2186,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 2186,\n end: 2187,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2188,\n end: 2189,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 2199,\n end: 2204,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 2204,\n end: 2206,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2206,\n end: 2207,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"salary\",\n start: 2207,\n end: 2213,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2213,\n end: 2214,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2215,\n end: 2216,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$salary\",\n start: 2217,\n end: 2224,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2224,\n end: 2225,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2231,\n end: 2232,\n },\n TokenData {\n kind: \"Else\",\n text: \"else\",\n start: 2233,\n end: 2237,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2238,\n end: 2239,\n },\n TokenData {\n kind: \"Die\",\n text: \"die\",\n start: 2249,\n end: 2252,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Invalid salary: $salary\\\"\",\n start: 2253,\n end: 2278,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2278,\n end: 2279,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2285,\n end: 2286,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2288,\n end: 2289,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 2293,\n end: 2296,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"to_string\",\n start: 2297,\n end: 2306,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2307,\n end: 2308,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 2314,\n end: 2316,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 2317,\n end: 2322,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2323,\n end: 2324,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 2325,\n end: 2330,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2330,\n end: 2331,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 2337,\n end: 2343,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"sprintf\",\n start: 2344,\n end: 2351,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 2351,\n end: 2352,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Employee(name='%s', age=%d, email='%s', id=%d, dept='%s', salary=%.2f)\\\"\",\n start: 2352,\n end: 2424,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2424,\n end: 2425,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 2447,\n end: 2452,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 2452,\n end: 2454,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2454,\n end: 2455,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 2455,\n end: 2459,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2459,\n end: 2460,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2460,\n end: 2461,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 2462,\n end: 2467,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 2467,\n end: 2469,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2469,\n end: 2470,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 2470,\n end: 2473,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2473,\n end: 2474,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2474,\n end: 2475,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 2476,\n end: 2481,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 2481,\n end: 2483,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2483,\n end: 2484,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"email\",\n start: 2484,\n end: 2489,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2489,\n end: 2490,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2490,\n end: 2491,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 2513,\n end: 2518,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 2518,\n end: 2520,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2520,\n end: 2521,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"employee_id\",\n start: 2521,\n end: 2532,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2532,\n end: 2533,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2533,\n end: 2534,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 2535,\n end: 2540,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 2540,\n end: 2542,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2542,\n end: 2543,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"department\",\n start: 2543,\n end: 2553,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2553,\n end: 2554,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2554,\n end: 2555,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$self\",\n start: 2556,\n end: 2561,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 2561,\n end: 2563,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 2563,\n end: 2564,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"salary\",\n start: 2564,\n end: 2570,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2570,\n end: 2571,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 2571,\n end: 2572,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2572,\n end: 2573,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 2575,\n end: 2576,\n },\n TokenData {\n kind: \"Package\",\n text: \"package\",\n start: 2596,\n end: 2603,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"main\",\n start: 2604,\n end: 2608,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2608,\n end: 2609,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 2641,\n end: 2643,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$name\",\n start: 2644,\n end: 2649,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2650,\n end: 2651,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"John Doe\\\"\",\n start: 2652,\n end: 2662,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2662,\n end: 2663,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 2665,\n end: 2667,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$age\",\n start: 2668,\n end: 2672,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2673,\n end: 2674,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"30\",\n start: 2675,\n end: 2677,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2677,\n end: 2678,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 2680,\n end: 2682,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$height\",\n start: 2683,\n end: 2690,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2691,\n end: 2692,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"5.9\",\n start: 2693,\n end: 2696,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2696,\n end: 2697,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 2699,\n end: 2701,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$is_married\",\n start: 2702,\n end: 2713,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2714,\n end: 2715,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1\",\n start: 2716,\n end: 2717,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2717,\n end: 2718,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 2738,\n end: 2740,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$spouse\",\n start: 2741,\n end: 2748,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2749,\n end: 2750,\n },\n TokenData {\n kind: \"Undef\",\n text: \"undef\",\n start: 2751,\n end: 2756,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2756,\n end: 2757,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 2784,\n end: 2786,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 2787,\n end: 2795,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2796,\n end: 2797,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 2798,\n end: 2799,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1\",\n start: 2799,\n end: 2800,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2800,\n end: 2801,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"2\",\n start: 2802,\n end: 2803,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2803,\n end: 2804,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"3\",\n start: 2805,\n end: 2806,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2806,\n end: 2807,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"4\",\n start: 2808,\n end: 2809,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2809,\n end: 2810,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"5\",\n start: 2811,\n end: 2812,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 2812,\n end: 2813,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2813,\n end: 2814,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 2816,\n end: 2818,\n },\n TokenData {\n kind: \"At\",\n text: \"@fruits\",\n start: 2819,\n end: 2826,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2827,\n end: 2828,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"qw\",\n start: 2829,\n end: 2831,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 2831,\n end: 2832,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"apple\",\n start: 2832,\n end: 2837,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"banana\",\n start: 2838,\n end: 2844,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"cherry\",\n start: 2845,\n end: 2851,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"date\",\n start: 2852,\n end: 2856,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"elderberry\",\n start: 2857,\n end: 2867,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 2867,\n end: 2868,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2868,\n end: 2869,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 2871,\n end: 2873,\n },\n TokenData {\n kind: \"At\",\n text: \"@mixed\",\n start: 2874,\n end: 2880,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2881,\n end: 2882,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 2883,\n end: 2884,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1\",\n start: 2884,\n end: 2885,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2885,\n end: 2886,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"hello\\\"\",\n start: 2887,\n end: 2894,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2894,\n end: 2895,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"3.14\",\n start: 2896,\n end: 2900,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2900,\n end: 2901,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"world\\\"\",\n start: 2902,\n end: 2909,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 2909,\n end: 2910,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 2910,\n end: 2911,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 2925,\n end: 2927,\n },\n TokenData {\n kind: \"Percent_\",\n text: \"%person\",\n start: 2928,\n end: 2935,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2936,\n end: 2937,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 2938,\n end: 2939,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 2945,\n end: 2949,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2950,\n end: 2951,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 2951,\n end: 2952,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Alice\\\"\",\n start: 2953,\n end: 2960,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2960,\n end: 2961,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 2967,\n end: 2970,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2971,\n end: 2972,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 2972,\n end: 2973,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"25\",\n start: 2974,\n end: 2976,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 2976,\n end: 2977,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"city\",\n start: 2983,\n end: 2987,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 2988,\n end: 2989,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 2989,\n end: 2990,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"New York\\\"\",\n start: 2991,\n end: 3001,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3001,\n end: 3002,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"hobbies\",\n start: 3008,\n end: 3015,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3016,\n end: 3017,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 3017,\n end: 3018,\n },\n TokenData {\n kind: \"LeftBracket\",\n text: \"[\",\n start: 3019,\n end: 3020,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"reading\\\"\",\n start: 3020,\n end: 3029,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3029,\n end: 3030,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"swimming\\\"\",\n start: 3031,\n end: 3041,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3041,\n end: 3042,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"coding\\\"\",\n start: 3043,\n end: 3051,\n },\n TokenData {\n kind: \"RightBracket\",\n text: \"]\",\n start: 3051,\n end: 3052,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 3054,\n end: 3055,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3055,\n end: 3056,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3060,\n end: 3062,\n },\n TokenData {\n kind: \"Percent_\",\n text: \"%colors\",\n start: 3063,\n end: 3070,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3071,\n end: 3072,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 3073,\n end: 3074,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"red\",\n start: 3080,\n end: 3083,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3086,\n end: 3087,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 3087,\n end: 3088,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"#FF0000\\\"\",\n start: 3089,\n end: 3098,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3098,\n end: 3099,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"green\",\n start: 3105,\n end: 3110,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3111,\n end: 3112,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 3112,\n end: 3113,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"#00FF00\\\"\",\n start: 3114,\n end: 3123,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3123,\n end: 3124,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"blue\",\n start: 3130,\n end: 3134,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3136,\n end: 3137,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 3137,\n end: 3138,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"#0000FF\\\"\",\n start: 3139,\n end: 3148,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3148,\n end: 3149,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"yellow\",\n start: 3155,\n end: 3161,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3162,\n end: 3163,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 3163,\n end: 3164,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"#FFFF00\\\"\",\n start: 3165,\n end: 3174,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 3176,\n end: 3177,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3177,\n end: 3178,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3196,\n end: 3198,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$array_ref\",\n start: 3199,\n end: 3209,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3210,\n end: 3211,\n },\n TokenData {\n kind: \"Error\",\n text: \"\\\\\",\n start: 3212,\n end: 3213,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 3213,\n end: 3221,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3221,\n end: 3222,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3224,\n end: 3226,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$hash_ref\",\n start: 3227,\n end: 3236,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3237,\n end: 3238,\n },\n TokenData {\n kind: \"Error\",\n text: \"\\\\\",\n start: 3239,\n end: 3240,\n },\n TokenData {\n kind: \"Percent_\",\n text: \"%person\",\n start: 3240,\n end: 3247,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3247,\n end: 3248,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3250,\n end: 3252,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$scalar_ref\",\n start: 3253,\n end: 3264,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3265,\n end: 3266,\n },\n TokenData {\n kind: \"Error\",\n text: \"\\\\\",\n start: 3267,\n end: 3268,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$name\",\n start: 3268,\n end: 3273,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3273,\n end: 3274,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3302,\n end: 3304,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$anon_array\",\n start: 3305,\n end: 3316,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3317,\n end: 3318,\n },\n TokenData {\n kind: \"LeftBracket\",\n text: \"[\",\n start: 3319,\n end: 3320,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1\",\n start: 3320,\n end: 3321,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3321,\n end: 3322,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"2\",\n start: 3323,\n end: 3324,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3324,\n end: 3325,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"3\",\n start: 3326,\n end: 3327,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3327,\n end: 3328,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"4\",\n start: 3329,\n end: 3330,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3330,\n end: 3331,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"5\",\n start: 3332,\n end: 3333,\n },\n TokenData {\n kind: \"RightBracket\",\n text: \"]\",\n start: 3333,\n end: 3334,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3334,\n end: 3335,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3337,\n end: 3339,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$anon_hash\",\n start: 3340,\n end: 3350,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3351,\n end: 3352,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 3353,\n end: 3354,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"x\",\n start: 3360,\n end: 3361,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3362,\n end: 3363,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 3363,\n end: 3364,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"10\",\n start: 3365,\n end: 3367,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3367,\n end: 3368,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"y\",\n start: 3374,\n end: 3375,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3376,\n end: 3377,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 3377,\n end: 3378,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"20\",\n start: 3379,\n end: 3381,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3381,\n end: 3382,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"z\",\n start: 3388,\n end: 3389,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3390,\n end: 3391,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 3391,\n end: 3392,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"30\",\n start: 3393,\n end: 3395,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 3397,\n end: 3398,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3398,\n end: 3399,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 3418,\n end: 3421,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"greet\",\n start: 3422,\n end: 3427,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 3428,\n end: 3429,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3435,\n end: 3437,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 3438,\n end: 3439,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$name\",\n start: 3439,\n end: 3444,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 3444,\n end: 3445,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$greeting\",\n start: 3446,\n end: 3455,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 3455,\n end: 3456,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3457,\n end: 3458,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 3459,\n end: 3461,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3461,\n end: 3462,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$greeting\",\n start: 3468,\n end: 3477,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 3478,\n end: 3479,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 3479,\n end: 3480,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3480,\n end: 3481,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Hello\\\"\",\n start: 3482,\n end: 3489,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3489,\n end: 3490,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 3496,\n end: 3502,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"$greeting, $name!\\\"\",\n start: 3503,\n end: 3522,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3522,\n end: 3523,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 3525,\n end: 3526,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 3530,\n end: 3533,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"factorial\",\n start: 3534,\n end: 3543,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 3544,\n end: 3545,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3551,\n end: 3553,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$n\",\n start: 3554,\n end: 3556,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3557,\n end: 3558,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 3559,\n end: 3564,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3564,\n end: 3565,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 3571,\n end: 3577,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1\",\n start: 3578,\n end: 3579,\n },\n TokenData {\n kind: \"If\",\n text: \"if\",\n start: 3580,\n end: 3582,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$n\",\n start: 3583,\n end: 3585,\n },\n TokenData {\n kind: \"LessEqual\",\n text: \"<=\",\n start: 3586,\n end: 3588,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1\",\n start: 3589,\n end: 3590,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3590,\n end: 3591,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 3597,\n end: 3603,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$n\",\n start: 3604,\n end: 3606,\n },\n TokenData {\n kind: \"Star\",\n text: \"*\",\n start: 3607,\n end: 3608,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"factorial\",\n start: 3609,\n end: 3618,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 3618,\n end: 3619,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$n\",\n start: 3619,\n end: 3621,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 3622,\n end: 3623,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1\",\n start: 3624,\n end: 3625,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 3625,\n end: 3626,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3626,\n end: 3627,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 3629,\n end: 3630,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 3634,\n end: 3637,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"fibonacci\",\n start: 3638,\n end: 3647,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 3648,\n end: 3649,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3655,\n end: 3657,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$n\",\n start: 3658,\n end: 3660,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3661,\n end: 3662,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 3663,\n end: 3668,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3668,\n end: 3669,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 3675,\n end: 3681,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$n\",\n start: 3682,\n end: 3684,\n },\n TokenData {\n kind: \"If\",\n text: \"if\",\n start: 3685,\n end: 3687,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$n\",\n start: 3688,\n end: 3690,\n },\n TokenData {\n kind: \"LessEqual\",\n text: \"<=\",\n start: 3691,\n end: 3693,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1\",\n start: 3694,\n end: 3695,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3695,\n end: 3696,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 3702,\n end: 3708,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"fibonacci\",\n start: 3709,\n end: 3718,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 3718,\n end: 3719,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$n\",\n start: 3719,\n end: 3721,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 3722,\n end: 3723,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1\",\n start: 3724,\n end: 3725,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 3725,\n end: 3726,\n },\n TokenData {\n kind: \"Plus\",\n text: \"+\",\n start: 3727,\n end: 3728,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"fibonacci\",\n start: 3729,\n end: 3738,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 3738,\n end: 3739,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$n\",\n start: 3739,\n end: 3741,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 3742,\n end: 3743,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"2\",\n start: 3744,\n end: 3745,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 3745,\n end: 3746,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3746,\n end: 3747,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 3749,\n end: 3750,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 3754,\n end: 3757,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"sum_array\",\n start: 3758,\n end: 3767,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 3768,\n end: 3769,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3775,\n end: 3777,\n },\n TokenData {\n kind: \"At\",\n text: \"@arr\",\n start: 3778,\n end: 3782,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3783,\n end: 3784,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 3785,\n end: 3787,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3787,\n end: 3788,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3794,\n end: 3796,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$total\",\n start: 3797,\n end: 3803,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3804,\n end: 3805,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"0\",\n start: 3806,\n end: 3807,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3807,\n end: 3808,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$total\",\n start: 3814,\n end: 3820,\n },\n TokenData {\n kind: \"PlusAssign\",\n text: \"+=\",\n start: 3821,\n end: 3823,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$_\",\n start: 3824,\n end: 3826,\n },\n TokenData {\n kind: \"For\",\n text: \"for\",\n start: 3827,\n end: 3830,\n },\n TokenData {\n kind: \"At\",\n text: \"@arr\",\n start: 3831,\n end: 3835,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3835,\n end: 3836,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 3842,\n end: 3848,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$total\",\n start: 3849,\n end: 3855,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3855,\n end: 3856,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 3858,\n end: 3859,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 3863,\n end: 3866,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"find_max\",\n start: 3867,\n end: 3875,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 3876,\n end: 3877,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3883,\n end: 3885,\n },\n TokenData {\n kind: \"At\",\n text: \"@arr\",\n start: 3886,\n end: 3890,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3891,\n end: 3892,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 3893,\n end: 3895,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3895,\n end: 3896,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 3902,\n end: 3908,\n },\n TokenData {\n kind: \"Undef\",\n text: \"undef\",\n start: 3909,\n end: 3914,\n },\n TokenData {\n kind: \"Unless\",\n text: \"unless\",\n start: 3915,\n end: 3921,\n },\n TokenData {\n kind: \"At\",\n text: \"@arr\",\n start: 3922,\n end: 3926,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3926,\n end: 3927,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3933,\n end: 3935,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$max\",\n start: 3936,\n end: 3940,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3941,\n end: 3942,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$arr\",\n start: 3943,\n end: 3947,\n },\n TokenData {\n kind: \"LeftBracket\",\n text: \"[\",\n start: 3947,\n end: 3948,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"0\",\n start: 3948,\n end: 3949,\n },\n TokenData {\n kind: \"RightBracket\",\n text: \"]\",\n start: 3949,\n end: 3950,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 3950,\n end: 3951,\n },\n TokenData {\n kind: \"For\",\n text: \"for\",\n start: 3957,\n end: 3960,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 3961,\n end: 3963,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$num\",\n start: 3964,\n end: 3968,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 3969,\n end: 3970,\n },\n TokenData {\n kind: \"At\",\n text: \"@arr\",\n start: 3970,\n end: 3974,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 3974,\n end: 3975,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 3976,\n end: 3977,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$max\",\n start: 3987,\n end: 3991,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 3992,\n end: 3993,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$num\",\n start: 3994,\n end: 3998,\n },\n TokenData {\n kind: \"If\",\n text: \"if\",\n start: 3999,\n end: 4001,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$num\",\n start: 4002,\n end: 4006,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 4007,\n end: 4008,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$max\",\n start: 4009,\n end: 4013,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4013,\n end: 4014,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 4020,\n end: 4021,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 4027,\n end: 4033,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$max\",\n start: 4034,\n end: 4038,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4038,\n end: 4039,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 4041,\n end: 4042,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 4065,\n end: 4068,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"read_file\",\n start: 4069,\n end: 4078,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 4079,\n end: 4080,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 4086,\n end: 4088,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$filename\",\n start: 4089,\n end: 4098,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 4099,\n end: 4100,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 4101,\n end: 4106,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4106,\n end: 4107,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"open\",\n start: 4113,\n end: 4117,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 4118,\n end: 4120,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$fh\",\n start: 4121,\n end: 4124,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 4124,\n end: 4125,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"'<'\",\n start: 4126,\n end: 4129,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 4129,\n end: 4130,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$filename\",\n start: 4131,\n end: 4140,\n },\n TokenData {\n kind: \"Or\",\n text: \"or\",\n start: 4141,\n end: 4143,\n },\n TokenData {\n kind: \"Die\",\n text: \"die\",\n start: 4144,\n end: 4147,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Cannot open file '$filename': $!\\\"\",\n start: 4148,\n end: 4182,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4182,\n end: 4183,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 4189,\n end: 4191,\n },\n TokenData {\n kind: \"At\",\n text: \"@lines\",\n start: 4192,\n end: 4198,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 4199,\n end: 4200,\n },\n TokenData {\n kind: \"LessThan\",\n text: \"<\",\n start: 4201,\n end: 4202,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$fh\",\n start: 4202,\n end: 4205,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 4205,\n end: 4206,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4206,\n end: 4207,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"close\",\n start: 4213,\n end: 4218,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$fh\",\n start: 4219,\n end: 4222,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4222,\n end: 4223,\n },\n TokenData {\n kind: \"Chomp\",\n text: \"chomp\",\n start: 4229,\n end: 4234,\n },\n TokenData {\n kind: \"At\",\n text: \"@lines\",\n start: 4235,\n end: 4241,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4241,\n end: 4242,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 4248,\n end: 4254,\n },\n TokenData {\n kind: \"At\",\n text: \"@lines\",\n start: 4255,\n end: 4261,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4261,\n end: 4262,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 4264,\n end: 4265,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 4269,\n end: 4272,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"write_file\",\n start: 4273,\n end: 4283,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 4284,\n end: 4285,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 4291,\n end: 4293,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 4294,\n end: 4295,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$filename\",\n start: 4295,\n end: 4304,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 4304,\n end: 4305,\n },\n TokenData {\n kind: \"At\",\n text: \"@lines\",\n start: 4306,\n end: 4312,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 4312,\n end: 4313,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 4314,\n end: 4315,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 4316,\n end: 4318,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4318,\n end: 4319,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"open\",\n start: 4325,\n end: 4329,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 4330,\n end: 4332,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$fh\",\n start: 4333,\n end: 4336,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 4336,\n end: 4337,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"'>'\",\n start: 4338,\n end: 4341,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 4341,\n end: 4342,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$filename\",\n start: 4343,\n end: 4352,\n },\n TokenData {\n kind: \"Or\",\n text: \"or\",\n start: 4353,\n end: 4355,\n },\n TokenData {\n kind: \"Die\",\n text: \"die\",\n start: 4356,\n end: 4359,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Cannot open file '$filename': $!\\\"\",\n start: 4360,\n end: 4394,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4394,\n end: 4395,\n },\n TokenData {\n kind: \"Print\",\n text: \"print\",\n start: 4401,\n end: 4406,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$fh\",\n start: 4407,\n end: 4410,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"$_\\\\n\\\"\",\n start: 4411,\n end: 4417,\n },\n TokenData {\n kind: \"For\",\n text: \"for\",\n start: 4418,\n end: 4421,\n },\n TokenData {\n kind: \"At\",\n text: \"@lines\",\n start: 4422,\n end: 4428,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4428,\n end: 4429,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"close\",\n start: 4435,\n end: 4440,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$fh\",\n start: 4441,\n end: 4444,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4444,\n end: 4445,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 4447,\n end: 4448,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 4475,\n end: 4478,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"validate_email\",\n start: 4479,\n end: 4493,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 4494,\n end: 4495,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 4501,\n end: 4503,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$email\",\n start: 4504,\n end: 4510,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 4511,\n end: 4512,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 4513,\n end: 4518,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4518,\n end: 4519,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 4525,\n end: 4531,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$email\",\n start: 4532,\n end: 4538,\n },\n TokenData {\n kind: \"Match\",\n text: \"=~\",\n start: 4539,\n end: 4541,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 4542,\n end: 4543,\n },\n TokenData {\n kind: \"BitwiseXor\",\n text: \"^\",\n start: 4543,\n end: 4544,\n },\n TokenData {\n kind: \"LeftBracket\",\n text: \"[\",\n start: 4544,\n end: 4545,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"a\",\n start: 4545,\n end: 4546,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 4546,\n end: 4547,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"zA\",\n start: 4547,\n end: 4549,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 4549,\n end: 4550,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Z0\",\n start: 4550,\n end: 4552,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 4552,\n end: 4553,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"9.\",\n start: 4553,\n end: 4555,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"_\",\n start: 4555,\n end: 4556,\n },\n TokenData {\n kind: \"Percent_\",\n text: \"%\",\n start: 4556,\n end: 4557,\n },\n TokenData {\n kind: \"Plus\",\n text: \"+\",\n start: 4557,\n end: 4558,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 4558,\n end: 4559,\n },\n TokenData {\n kind: \"RightBracket\",\n text: \"]\",\n start: 4559,\n end: 4560,\n },\n TokenData {\n kind: \"Plus\",\n text: \"+\",\n start: 4560,\n end: 4561,\n },\n TokenData {\n kind: \"At\",\n text: \"@\",\n start: 4561,\n end: 4562,\n },\n TokenData {\n kind: \"LeftBracket\",\n text: \"[\",\n start: 4562,\n end: 4563,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"a\",\n start: 4563,\n end: 4564,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 4564,\n end: 4565,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"zA\",\n start: 4565,\n end: 4567,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 4567,\n end: 4568,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Z0\",\n start: 4568,\n end: 4570,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 4570,\n end: 4571,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"9.\",\n start: 4571,\n end: 4573,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 4573,\n end: 4574,\n },\n TokenData {\n kind: \"RightBracket\",\n text: \"]\",\n start: 4574,\n end: 4575,\n },\n TokenData {\n kind: \"Plus\",\n text: \"+\",\n start: 4575,\n end: 4576,\n },\n TokenData {\n kind: \"Error\",\n text: \"\\\\\",\n start: 4576,\n end: 4577,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 4577,\n end: 4578,\n },\n TokenData {\n kind: \"LeftBracket\",\n text: \"[\",\n start: 4578,\n end: 4579,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"a\",\n start: 4579,\n end: 4580,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 4580,\n end: 4581,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"zA\",\n start: 4581,\n end: 4583,\n },\n TokenData {\n kind: \"Minus\",\n text: \"-\",\n start: 4583,\n end: 4584,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Z\",\n start: 4584,\n end: 4585,\n },\n TokenData {\n kind: \"RightBracket\",\n text: \"]\",\n start: 4585,\n end: 4586,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 4586,\n end: 4587,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"2\",\n start: 4587,\n end: 4588,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 4588,\n end: 4589,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 4589,\n end: 4590,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$\",\n start: 4590,\n end: 4591,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 4591,\n end: 4592,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4592,\n end: 4593,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 4595,\n end: 4596,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 4600,\n end: 4603,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"extract_numbers\",\n start: 4604,\n end: 4619,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 4620,\n end: 4621,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 4627,\n end: 4629,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$text\",\n start: 4630,\n end: 4635,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 4636,\n end: 4637,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 4638,\n end: 4643,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4643,\n end: 4644,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 4650,\n end: 4652,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 4653,\n end: 4661,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 4662,\n end: 4663,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$text\",\n start: 4664,\n end: 4669,\n },\n TokenData {\n kind: \"Match\",\n text: \"=~\",\n start: 4670,\n end: 4672,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 4673,\n end: 4674,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 4674,\n end: 4675,\n },\n TokenData {\n kind: \"Error\",\n text: \"\\\\\",\n start: 4675,\n end: 4676,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"d\",\n start: 4676,\n end: 4677,\n },\n TokenData {\n kind: \"Plus\",\n text: \"+\",\n start: 4677,\n end: 4678,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 4678,\n end: 4679,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 4679,\n end: 4680,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"g\",\n start: 4680,\n end: 4681,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4681,\n end: 4682,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 4688,\n end: 4694,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 4695,\n end: 4703,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4703,\n end: 4704,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 4706,\n end: 4707,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 4711,\n end: 4714,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"replace_words\",\n start: 4715,\n end: 4728,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 4729,\n end: 4730,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 4736,\n end: 4738,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 4739,\n end: 4740,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$text\",\n start: 4740,\n end: 4745,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 4745,\n end: 4746,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$old_word\",\n start: 4747,\n end: 4756,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 4756,\n end: 4757,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$new_word\",\n start: 4758,\n end: 4767,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 4767,\n end: 4768,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 4769,\n end: 4770,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 4771,\n end: 4773,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4773,\n end: 4774,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$text\",\n start: 4780,\n end: 4785,\n },\n TokenData {\n kind: \"Match\",\n text: \"=~\",\n start: 4786,\n end: 4788,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"s\",\n start: 4789,\n end: 4790,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 4790,\n end: 4791,\n },\n TokenData {\n kind: \"Error\",\n text: \"\\\\\",\n start: 4791,\n end: 4792,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"b\",\n start: 4792,\n end: 4793,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$old_word\",\n start: 4793,\n end: 4802,\n },\n TokenData {\n kind: \"Error\",\n text: \"\\\\\",\n start: 4802,\n end: 4803,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"b\",\n start: 4803,\n end: 4804,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 4804,\n end: 4805,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$new_word\",\n start: 4805,\n end: 4814,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 4814,\n end: 4815,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"g\",\n start: 4815,\n end: 4816,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4816,\n end: 4817,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 4823,\n end: 4829,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$text\",\n start: 4830,\n end: 4835,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4835,\n end: 4836,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 4838,\n end: 4839,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 4865,\n end: 4868,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"demonstrate_loops\",\n start: 4869,\n end: 4886,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 4887,\n end: 4888,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 4894,\n end: 4897,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"=== Loop Demonstrations ===\\\"\",\n start: 4898,\n end: 4927,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4927,\n end: 4928,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 4956,\n end: 4959,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"For loop (1 to 5):\\\"\",\n start: 4960,\n end: 4980,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 4980,\n end: 4981,\n },\n TokenData {\n kind: \"For\",\n text: \"for\",\n start: 4987,\n end: 4990,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 4991,\n end: 4993,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$i\",\n start: 4994,\n end: 4996,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 4997,\n end: 4998,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1.\",\n start: 4998,\n end: 5000,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 5000,\n end: 5001,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"5\",\n start: 5001,\n end: 5002,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 5002,\n end: 5003,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 5004,\n end: 5005,\n },\n TokenData {\n kind: \"Print\",\n text: \"print\",\n start: 5015,\n end: 5020,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"$i \\\"\",\n start: 5021,\n end: 5026,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5026,\n end: 5027,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 5033,\n end: 5034,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5040,\n end: 5043,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"\\\"\",\n start: 5044,\n end: 5046,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5046,\n end: 5047,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5077,\n end: 5080,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"While loop (countdown from 5):\\\"\",\n start: 5081,\n end: 5113,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5113,\n end: 5114,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 5120,\n end: 5122,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$count\",\n start: 5123,\n end: 5129,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 5130,\n end: 5131,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"5\",\n start: 5132,\n end: 5133,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5133,\n end: 5134,\n },\n TokenData {\n kind: \"While\",\n text: \"while\",\n start: 5140,\n end: 5145,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 5146,\n end: 5147,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$count\",\n start: 5147,\n end: 5153,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 5154,\n end: 5155,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"0\",\n start: 5156,\n end: 5157,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 5157,\n end: 5158,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 5159,\n end: 5160,\n },\n TokenData {\n kind: \"Print\",\n text: \"print\",\n start: 5170,\n end: 5175,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"$count \\\"\",\n start: 5176,\n end: 5185,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5185,\n end: 5186,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$count\",\n start: 5196,\n end: 5202,\n },\n TokenData {\n kind: \"Decrement\",\n text: \"--\",\n start: 5202,\n end: 5204,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5204,\n end: 5205,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 5211,\n end: 5212,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5218,\n end: 5221,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"\\\"\",\n start: 5222,\n end: 5224,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5224,\n end: 5225,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5257,\n end: 5260,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Foreach loop (fruits):\\\"\",\n start: 5261,\n end: 5285,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5285,\n end: 5286,\n },\n TokenData {\n kind: \"Foreach\",\n text: \"foreach\",\n start: 5292,\n end: 5299,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 5300,\n end: 5302,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$fruit\",\n start: 5303,\n end: 5309,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 5310,\n end: 5311,\n },\n TokenData {\n kind: \"At\",\n text: \"@fruits\",\n start: 5311,\n end: 5318,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 5318,\n end: 5319,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 5320,\n end: 5321,\n },\n TokenData {\n kind: \"Print\",\n text: \"print\",\n start: 5331,\n end: 5336,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"$fruit \\\"\",\n start: 5337,\n end: 5346,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5346,\n end: 5347,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 5353,\n end: 5354,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5360,\n end: 5363,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"\\\"\",\n start: 5364,\n end: 5366,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5366,\n end: 5367,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5399,\n end: 5402,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Map function (squares):\\\"\",\n start: 5403,\n end: 5428,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5428,\n end: 5429,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 5435,\n end: 5437,\n },\n TokenData {\n kind: \"At\",\n text: \"@squares\",\n start: 5438,\n end: 5446,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 5447,\n end: 5448,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"map\",\n start: 5449,\n end: 5452,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 5453,\n end: 5454,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$_\",\n start: 5455,\n end: 5457,\n },\n TokenData {\n kind: \"Star\",\n text: \"*\",\n start: 5458,\n end: 5459,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$_\",\n start: 5460,\n end: 5462,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 5463,\n end: 5464,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 5465,\n end: 5466,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1.\",\n start: 5466,\n end: 5468,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 5468,\n end: 5469,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"5\",\n start: 5469,\n end: 5470,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 5470,\n end: 5471,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5471,\n end: 5472,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5478,\n end: 5481,\n },\n TokenData {\n kind: \"Join\",\n text: \"join\",\n start: 5482,\n end: 5486,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 5486,\n end: 5487,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\", \\\"\",\n start: 5487,\n end: 5491,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 5491,\n end: 5492,\n },\n TokenData {\n kind: \"At\",\n text: \"@squares\",\n start: 5493,\n end: 5501,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 5501,\n end: 5502,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5502,\n end: 5503,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5536,\n end: 5539,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Grep function (even numbers):\\\"\",\n start: 5540,\n end: 5571,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5571,\n end: 5572,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 5578,\n end: 5580,\n },\n TokenData {\n kind: \"At\",\n text: \"@evens\",\n start: 5581,\n end: 5587,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 5588,\n end: 5589,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"grep\",\n start: 5590,\n end: 5594,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 5595,\n end: 5596,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$_\",\n start: 5597,\n end: 5599,\n },\n TokenData {\n kind: \"Percent_\",\n text: \"%\",\n start: 5600,\n end: 5601,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"2\",\n start: 5602,\n end: 5603,\n },\n TokenData {\n kind: \"Equal\",\n text: \"==\",\n start: 5604,\n end: 5606,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"0\",\n start: 5607,\n end: 5608,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 5609,\n end: 5610,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 5611,\n end: 5612,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1.\",\n start: 5612,\n end: 5614,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 5614,\n end: 5615,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"10\",\n start: 5615,\n end: 5617,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 5617,\n end: 5618,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5618,\n end: 5619,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5625,\n end: 5628,\n },\n TokenData {\n kind: \"Join\",\n text: \"join\",\n start: 5629,\n end: 5633,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 5633,\n end: 5634,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\", \\\"\",\n start: 5634,\n end: 5638,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 5638,\n end: 5639,\n },\n TokenData {\n kind: \"At\",\n text: \"@evens\",\n start: 5640,\n end: 5646,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 5646,\n end: 5647,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5647,\n end: 5648,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 5650,\n end: 5651,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 5655,\n end: 5658,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"demonstrate_conditionals\",\n start: 5659,\n end: 5683,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 5684,\n end: 5685,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 5691,\n end: 5693,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$score\",\n start: 5694,\n end: 5700,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 5701,\n end: 5702,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 5703,\n end: 5708,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 5709,\n end: 5710,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 5710,\n end: 5711,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"85\",\n start: 5712,\n end: 5714,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5714,\n end: 5715,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5727,\n end: 5730,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"=== Conditional Demonstrations ===\\\"\",\n start: 5731,\n end: 5767,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5767,\n end: 5768,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5774,\n end: 5777,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Score: $score\\\"\",\n start: 5778,\n end: 5793,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5793,\n end: 5794,\n },\n TokenData {\n kind: \"If\",\n text: \"if\",\n start: 5827,\n end: 5829,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 5830,\n end: 5831,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$score\",\n start: 5831,\n end: 5837,\n },\n TokenData {\n kind: \"GreaterEqual\",\n text: \">=\",\n start: 5838,\n end: 5840,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"90\",\n start: 5841,\n end: 5843,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 5843,\n end: 5844,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 5845,\n end: 5846,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5856,\n end: 5859,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Grade: A\\\"\",\n start: 5860,\n end: 5870,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5870,\n end: 5871,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 5877,\n end: 5878,\n },\n TokenData {\n kind: \"Elsif\",\n text: \"elsif\",\n start: 5879,\n end: 5884,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 5885,\n end: 5886,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$score\",\n start: 5886,\n end: 5892,\n },\n TokenData {\n kind: \"GreaterEqual\",\n text: \">=\",\n start: 5893,\n end: 5895,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"80\",\n start: 5896,\n end: 5898,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 5898,\n end: 5899,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 5900,\n end: 5901,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5911,\n end: 5914,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Grade: B\\\"\",\n start: 5915,\n end: 5925,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5925,\n end: 5926,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 5932,\n end: 5933,\n },\n TokenData {\n kind: \"Elsif\",\n text: \"elsif\",\n start: 5934,\n end: 5939,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 5940,\n end: 5941,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$score\",\n start: 5941,\n end: 5947,\n },\n TokenData {\n kind: \"GreaterEqual\",\n text: \">=\",\n start: 5948,\n end: 5950,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"70\",\n start: 5951,\n end: 5953,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 5953,\n end: 5954,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 5955,\n end: 5956,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 5966,\n end: 5969,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Grade: C\\\"\",\n start: 5970,\n end: 5980,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 5980,\n end: 5981,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 5987,\n end: 5988,\n },\n TokenData {\n kind: \"Elsif\",\n text: \"elsif\",\n start: 5989,\n end: 5994,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 5995,\n end: 5996,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$score\",\n start: 5996,\n end: 6002,\n },\n TokenData {\n kind: \"GreaterEqual\",\n text: \">=\",\n start: 6003,\n end: 6005,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"60\",\n start: 6006,\n end: 6008,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 6008,\n end: 6009,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 6010,\n end: 6011,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 6021,\n end: 6024,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Grade: D\\\"\",\n start: 6025,\n end: 6035,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6035,\n end: 6036,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 6042,\n end: 6043,\n },\n TokenData {\n kind: \"Else\",\n text: \"else\",\n start: 6044,\n end: 6048,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 6049,\n end: 6050,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 6060,\n end: 6063,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Grade: F\\\"\",\n start: 6064,\n end: 6074,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6074,\n end: 6075,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 6081,\n end: 6082,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 6118,\n end: 6120,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$pass_fail\",\n start: 6121,\n end: 6131,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 6132,\n end: 6133,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$score\",\n start: 6134,\n end: 6140,\n },\n TokenData {\n kind: \"GreaterEqual\",\n text: \">=\",\n start: 6141,\n end: 6143,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"60\",\n start: 6144,\n end: 6146,\n },\n TokenData {\n kind: \"Question\",\n text: \"?\",\n start: 6147,\n end: 6148,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Pass\\\"\",\n start: 6149,\n end: 6155,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 6156,\n end: 6157,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Fail\\\"\",\n start: 6158,\n end: 6164,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6164,\n end: 6165,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 6171,\n end: 6174,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Result: $pass_fail\\\"\",\n start: 6175,\n end: 6195,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6195,\n end: 6196,\n },\n TokenData {\n kind: \"Unless\",\n text: \"unless\",\n start: 6222,\n end: 6228,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 6229,\n end: 6230,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$score\",\n start: 6230,\n end: 6236,\n },\n TokenData {\n kind: \"LessThan\",\n text: \"<\",\n start: 6237,\n end: 6238,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"60\",\n start: 6239,\n end: 6241,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 6241,\n end: 6242,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 6243,\n end: 6244,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 6254,\n end: 6257,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Student passed the exam\\\"\",\n start: 6258,\n end: 6283,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6283,\n end: 6284,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 6290,\n end: 6291,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 6293,\n end: 6294,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 6316,\n end: 6319,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"safe_divide\",\n start: 6320,\n end: 6331,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 6332,\n end: 6333,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 6339,\n end: 6341,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 6342,\n end: 6343,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$a\",\n start: 6343,\n end: 6345,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 6345,\n end: 6346,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$b\",\n start: 6347,\n end: 6349,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 6349,\n end: 6350,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 6351,\n end: 6352,\n },\n TokenData {\n kind: \"At\",\n text: \"@_\",\n start: 6353,\n end: 6355,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6355,\n end: 6356,\n },\n TokenData {\n kind: \"Eval\",\n text: \"eval\",\n start: 6368,\n end: 6372,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 6373,\n end: 6374,\n },\n TokenData {\n kind: \"Die\",\n text: \"die\",\n start: 6384,\n end: 6387,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Division by zero\\\"\",\n start: 6388,\n end: 6406,\n },\n TokenData {\n kind: \"If\",\n text: \"if\",\n start: 6407,\n end: 6409,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$b\",\n start: 6410,\n end: 6412,\n },\n TokenData {\n kind: \"Equal\",\n text: \"==\",\n start: 6413,\n end: 6415,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"0\",\n start: 6416,\n end: 6417,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6417,\n end: 6418,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 6428,\n end: 6434,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$a\",\n start: 6435,\n end: 6437,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 6438,\n end: 6439,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$b\",\n start: 6440,\n end: 6442,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6442,\n end: 6443,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 6449,\n end: 6450,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6450,\n end: 6451,\n },\n TokenData {\n kind: \"If\",\n text: \"if\",\n start: 6463,\n end: 6465,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 6466,\n end: 6467,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$\",\n start: 6467,\n end: 6468,\n },\n TokenData {\n kind: \"At\",\n text: \"@\",\n start: 6468,\n end: 6469,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 6469,\n end: 6470,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 6471,\n end: 6472,\n },\n TokenData {\n kind: \"Warn\",\n text: \"warn\",\n start: 6482,\n end: 6486,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Error in division: $@\\\"\",\n start: 6487,\n end: 6510,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6510,\n end: 6511,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 6521,\n end: 6527,\n },\n TokenData {\n kind: \"Undef\",\n text: \"undef\",\n start: 6528,\n end: 6533,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6533,\n end: 6534,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 6540,\n end: 6541,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 6543,\n end: 6544,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 6569,\n end: 6572,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"demonstrate_strings\",\n start: 6573,\n end: 6592,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 6593,\n end: 6594,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 6600,\n end: 6603,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"=== String Demonstrations ===\\\"\",\n start: 6604,\n end: 6635,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6635,\n end: 6636,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 6648,\n end: 6650,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$str\",\n start: 6651,\n end: 6655,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 6656,\n end: 6657,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\" Hello, World! \\\"\",\n start: 6658,\n end: 6677,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6677,\n end: 6678,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 6684,\n end: 6687,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Original: '$str'\\\"\",\n start: 6688,\n end: 6706,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6706,\n end: 6707,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 6741,\n end: 6744,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Length: \\\"\",\n start: 6745,\n end: 6755,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 6756,\n end: 6757,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"length\",\n start: 6758,\n end: 6764,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 6764,\n end: 6765,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$str\",\n start: 6765,\n end: 6769,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 6769,\n end: 6770,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6770,\n end: 6771,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 6777,\n end: 6780,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Uppercase: \\\"\",\n start: 6781,\n end: 6794,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 6795,\n end: 6796,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"uc\",\n start: 6797,\n end: 6799,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 6799,\n end: 6800,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$str\",\n start: 6800,\n end: 6804,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 6804,\n end: 6805,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6805,\n end: 6806,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 6812,\n end: 6815,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Lowercase: \\\"\",\n start: 6816,\n end: 6829,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 6830,\n end: 6831,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"lc\",\n start: 6832,\n end: 6834,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 6834,\n end: 6835,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$str\",\n start: 6835,\n end: 6839,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 6839,\n end: 6840,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6840,\n end: 6841,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 6847,\n end: 6850,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Trimmed: '\\\"\",\n start: 6851,\n end: 6863,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 6864,\n end: 6865,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"trim\",\n start: 6866,\n end: 6870,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 6870,\n end: 6871,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$str\",\n start: 6871,\n end: 6875,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 6875,\n end: 6876,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 6877,\n end: 6878,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"'\\\"\",\n start: 6879,\n end: 6882,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6882,\n end: 6883,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 6889,\n end: 6892,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Substring: \\\"\",\n start: 6893,\n end: 6906,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 6907,\n end: 6908,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"substr\",\n start: 6909,\n end: 6915,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 6915,\n end: 6916,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$str\",\n start: 6916,\n end: 6920,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 6920,\n end: 6921,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"2\",\n start: 6922,\n end: 6923,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 6923,\n end: 6924,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"5\",\n start: 6925,\n end: 6926,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 6926,\n end: 6927,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6927,\n end: 6928,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 6934,\n end: 6937,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Index of 'World': \\\"\",\n start: 6938,\n end: 6958,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 6959,\n end: 6960,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"index\",\n start: 6961,\n end: 6966,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 6966,\n end: 6967,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$str\",\n start: 6967,\n end: 6971,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 6971,\n end: 6972,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"'World'\",\n start: 6973,\n end: 6980,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 6980,\n end: 6981,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 6981,\n end: 6982,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 7022,\n end: 7024,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$name\",\n start: 7025,\n end: 7030,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 7031,\n end: 7032,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Alice\\\"\",\n start: 7033,\n end: 7040,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7040,\n end: 7041,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 7047,\n end: 7049,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$age\",\n start: 7050,\n end: 7054,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 7055,\n end: 7056,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"30\",\n start: 7057,\n end: 7059,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7059,\n end: 7060,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 7066,\n end: 7069,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Interpolation: $name is $age years old\\\"\",\n start: 7070,\n end: 7110,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7110,\n end: 7111,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 7145,\n end: 7147,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$poem\",\n start: 7148,\n end: 7153,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 7154,\n end: 7155,\n },\n TokenData {\n kind: \"LeftShift\",\n text: \"<<\",\n start: 7156,\n end: 7158,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"'END_POEM'\",\n start: 7158,\n end: 7168,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7168,\n end: 7169,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Roses\",\n start: 7171,\n end: 7176,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"are\",\n start: 7177,\n end: 7180,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"red\",\n start: 7181,\n end: 7184,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 7184,\n end: 7185,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Violets\",\n start: 7187,\n end: 7194,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"are\",\n start: 7195,\n end: 7198,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"blue\",\n start: 7199,\n end: 7203,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 7203,\n end: 7204,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Perl\",\n start: 7206,\n end: 7210,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"is\",\n start: 7211,\n end: 7213,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"powerful\",\n start: 7214,\n end: 7222,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 7222,\n end: 7223,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"And\",\n start: 7225,\n end: 7228,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"so\",\n start: 7229,\n end: 7231,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"are\",\n start: 7232,\n end: 7235,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"you\",\n start: 7236,\n end: 7239,\n },\n TokenData {\n kind: \"LogicalNot\",\n text: \"!\",\n start: 7239,\n end: 7240,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"END_POEM\",\n start: 7242,\n end: 7250,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 7262,\n end: 7265,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Poem:\\\\n$poem\\\"\",\n start: 7266,\n end: 7280,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7280,\n end: 7281,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 7283,\n end: 7284,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 7288,\n end: 7291,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"trim\",\n start: 7292,\n end: 7296,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 7297,\n end: 7298,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 7304,\n end: 7306,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$str\",\n start: 7307,\n end: 7311,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 7312,\n end: 7313,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 7314,\n end: 7319,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7319,\n end: 7320,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$str\",\n start: 7326,\n end: 7330,\n },\n TokenData {\n kind: \"Match\",\n text: \"=~\",\n start: 7331,\n end: 7333,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"s\",\n start: 7334,\n end: 7335,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 7335,\n end: 7336,\n },\n TokenData {\n kind: \"BitwiseXor\",\n text: \"^\",\n start: 7336,\n end: 7337,\n },\n TokenData {\n kind: \"Error\",\n text: \"\\\\\",\n start: 7337,\n end: 7338,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"s\",\n start: 7338,\n end: 7339,\n },\n TokenData {\n kind: \"Plus\",\n text: \"+\",\n start: 7339,\n end: 7340,\n },\n TokenData {\n kind: \"BitwiseOr\",\n text: \"|\",\n start: 7340,\n end: 7341,\n },\n TokenData {\n kind: \"Error\",\n text: \"\\\\\",\n start: 7341,\n end: 7342,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"s\",\n start: 7342,\n end: 7343,\n },\n TokenData {\n kind: \"Plus\",\n text: \"+\",\n start: 7343,\n end: 7344,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$\",\n start: 7344,\n end: 7345,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 7345,\n end: 7346,\n },\n TokenData {\n kind: \"Slash\",\n text: \"/\",\n start: 7346,\n end: 7347,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"g\",\n start: 7347,\n end: 7348,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7348,\n end: 7349,\n },\n TokenData {\n kind: \"Return\",\n text: \"return\",\n start: 7355,\n end: 7361,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$str\",\n start: 7362,\n end: 7366,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7366,\n end: 7367,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 7369,\n end: 7370,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 7393,\n end: 7396,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"demonstrate_hashes\",\n start: 7397,\n end: 7415,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 7416,\n end: 7417,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 7423,\n end: 7426,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"=== Hash Demonstrations ===\\\"\",\n start: 7427,\n end: 7456,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7456,\n end: 7457,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 7469,\n end: 7471,\n },\n TokenData {\n kind: \"Percent_\",\n text: \"%student\",\n start: 7472,\n end: 7480,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 7481,\n end: 7482,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 7483,\n end: 7484,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 7494,\n end: 7498,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 7499,\n end: 7500,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 7500,\n end: 7501,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Bob\\\"\",\n start: 7502,\n end: 7507,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 7507,\n end: 7508,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 7518,\n end: 7521,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 7522,\n end: 7523,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 7523,\n end: 7524,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"22\",\n start: 7525,\n end: 7527,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 7527,\n end: 7528,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"major\",\n start: 7538,\n end: 7543,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 7544,\n end: 7545,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 7545,\n end: 7546,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Computer Science\\\"\",\n start: 7547,\n end: 7565,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 7565,\n end: 7566,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"gpa\",\n start: 7576,\n end: 7579,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 7580,\n end: 7581,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 7581,\n end: 7582,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"3.8\",\n start: 7583,\n end: 7586,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 7592,\n end: 7593,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7593,\n end: 7594,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 7637,\n end: 7640,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Student name: $student{name}\\\"\",\n start: 7641,\n end: 7671,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7671,\n end: 7672,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 7678,\n end: 7681,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Student GPA: $student{gpa}\\\"\",\n start: 7682,\n end: 7710,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7710,\n end: 7711,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$student\",\n start: 7750,\n end: 7758,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 7758,\n end: 7759,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"graduation_year\",\n start: 7759,\n end: 7774,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 7774,\n end: 7775,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 7776,\n end: 7777,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"2024\",\n start: 7778,\n end: 7782,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7782,\n end: 7783,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$student\",\n start: 7789,\n end: 7797,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 7797,\n end: 7798,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"honors\",\n start: 7798,\n end: 7804,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 7804,\n end: 7805,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 7806,\n end: 7807,\n },\n TokenData {\n kind: \"LeftBracket\",\n text: \"[\",\n start: 7808,\n end: 7809,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Dean's List\\\"\",\n start: 7809,\n end: 7822,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 7822,\n end: 7823,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Magna Cum Laude\\\"\",\n start: 7824,\n end: 7841,\n },\n TokenData {\n kind: \"RightBracket\",\n text: \"]\",\n start: 7841,\n end: 7842,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7842,\n end: 7843,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 7882,\n end: 7885,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Student information:\\\"\",\n start: 7886,\n end: 7908,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7908,\n end: 7909,\n },\n TokenData {\n kind: \"For\",\n text: \"for\",\n start: 7915,\n end: 7918,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 7919,\n end: 7921,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$key\",\n start: 7922,\n end: 7926,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 7927,\n end: 7928,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"sort\",\n start: 7928,\n end: 7932,\n },\n TokenData {\n kind: \"Keys\",\n text: \"keys\",\n start: 7933,\n end: 7937,\n },\n TokenData {\n kind: \"Percent_\",\n text: \"%student\",\n start: 7938,\n end: 7946,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 7946,\n end: 7947,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 7948,\n end: 7949,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 7959,\n end: 7961,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$value\",\n start: 7962,\n end: 7968,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 7969,\n end: 7970,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$student\",\n start: 7971,\n end: 7979,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 7979,\n end: 7980,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$key\",\n start: 7980,\n end: 7984,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 7984,\n end: 7985,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 7985,\n end: 7986,\n },\n TokenData {\n kind: \"If\",\n text: \"if\",\n start: 7996,\n end: 7998,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 7999,\n end: 8000,\n },\n TokenData {\n kind: \"Ref\",\n text: \"ref\",\n start: 8000,\n end: 8003,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 8003,\n end: 8004,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$value\",\n start: 8004,\n end: 8010,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 8010,\n end: 8011,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"eq\",\n start: 8012,\n end: 8014,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"'ARRAY'\",\n start: 8015,\n end: 8022,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 8022,\n end: 8023,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 8024,\n end: 8025,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 8039,\n end: 8042,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\" $key: \\\"\",\n start: 8043,\n end: 8053,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 8054,\n end: 8055,\n },\n TokenData {\n kind: \"Join\",\n text: \"join\",\n start: 8056,\n end: 8060,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 8060,\n end: 8061,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\", \\\"\",\n start: 8061,\n end: 8065,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8065,\n end: 8066,\n },\n TokenData {\n kind: \"At\",\n text: \"@\",\n start: 8067,\n end: 8068,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$value\",\n start: 8068,\n end: 8074,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 8074,\n end: 8075,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8075,\n end: 8076,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 8086,\n end: 8087,\n },\n TokenData {\n kind: \"Else\",\n text: \"else\",\n start: 8088,\n end: 8092,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 8093,\n end: 8094,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 8108,\n end: 8111,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\" $key: $value\\\"\",\n start: 8112,\n end: 8128,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8128,\n end: 8129,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 8139,\n end: 8140,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 8146,\n end: 8147,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 8178,\n end: 8180,\n },\n TokenData {\n kind: \"At\",\n text: \"@info\",\n start: 8181,\n end: 8186,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 8187,\n end: 8188,\n },\n TokenData {\n kind: \"At\",\n text: \"@student\",\n start: 8189,\n end: 8197,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 8197,\n end: 8198,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"qw\",\n start: 8198,\n end: 8200,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 8200,\n end: 8201,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 8201,\n end: 8205,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 8206,\n end: 8209,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"major\",\n start: 8210,\n end: 8215,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 8215,\n end: 8216,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 8216,\n end: 8217,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8217,\n end: 8218,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 8224,\n end: 8227,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Basic info: \\\"\",\n start: 8228,\n end: 8242,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 8243,\n end: 8244,\n },\n TokenData {\n kind: \"Join\",\n text: \"join\",\n start: 8245,\n end: 8249,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 8249,\n end: 8250,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\", \\\"\",\n start: 8250,\n end: 8254,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8254,\n end: 8255,\n },\n TokenData {\n kind: \"At\",\n text: \"@info\",\n start: 8256,\n end: 8261,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 8261,\n end: 8262,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8262,\n end: 8263,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 8265,\n end: 8266,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 8290,\n end: 8293,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"demonstrate_arrays\",\n start: 8294,\n end: 8312,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 8313,\n end: 8314,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 8320,\n end: 8323,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"=== Array Demonstrations ===\\\"\",\n start: 8324,\n end: 8354,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8354,\n end: 8355,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 8367,\n end: 8369,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 8370,\n end: 8378,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 8379,\n end: 8380,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 8381,\n end: 8382,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"10\",\n start: 8382,\n end: 8384,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8384,\n end: 8385,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"5\",\n start: 8386,\n end: 8387,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8387,\n end: 8388,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"8\",\n start: 8389,\n end: 8390,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8390,\n end: 8391,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"3\",\n start: 8392,\n end: 8393,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8393,\n end: 8394,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"12\",\n start: 8395,\n end: 8397,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8397,\n end: 8398,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"7\",\n start: 8399,\n end: 8400,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 8400,\n end: 8401,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8401,\n end: 8402,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 8408,\n end: 8411,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Original array: \\\"\",\n start: 8412,\n end: 8430,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 8431,\n end: 8432,\n },\n TokenData {\n kind: \"Join\",\n text: \"join\",\n start: 8433,\n end: 8437,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 8437,\n end: 8438,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\", \\\"\",\n start: 8438,\n end: 8442,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8442,\n end: 8443,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 8444,\n end: 8452,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 8452,\n end: 8453,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8453,\n end: 8454,\n },\n TokenData {\n kind: \"Push\",\n text: \"push\",\n start: 8489,\n end: 8493,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 8494,\n end: 8502,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8502,\n end: 8503,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"15\",\n start: 8504,\n end: 8506,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8506,\n end: 8507,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 8513,\n end: 8516,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"After push: \\\"\",\n start: 8517,\n end: 8531,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 8532,\n end: 8533,\n },\n TokenData {\n kind: \"Join\",\n text: \"join\",\n start: 8534,\n end: 8538,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 8538,\n end: 8539,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\", \\\"\",\n start: 8539,\n end: 8543,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8543,\n end: 8544,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 8545,\n end: 8553,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 8553,\n end: 8554,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8554,\n end: 8555,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 8567,\n end: 8569,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$last\",\n start: 8570,\n end: 8575,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 8576,\n end: 8577,\n },\n TokenData {\n kind: \"Pop\",\n text: \"pop\",\n start: 8578,\n end: 8581,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 8582,\n end: 8590,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8590,\n end: 8591,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 8597,\n end: 8600,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Popped: $last, Array: \\\"\",\n start: 8601,\n end: 8625,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 8626,\n end: 8627,\n },\n TokenData {\n kind: \"Join\",\n text: \"join\",\n start: 8628,\n end: 8632,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 8632,\n end: 8633,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\", \\\"\",\n start: 8633,\n end: 8637,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8637,\n end: 8638,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 8639,\n end: 8647,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 8647,\n end: 8648,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8648,\n end: 8649,\n },\n TokenData {\n kind: \"Unshift\",\n text: \"unshift\",\n start: 8661,\n end: 8668,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 8669,\n end: 8677,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8677,\n end: 8678,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1\",\n start: 8679,\n end: 8680,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8680,\n end: 8681,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 8687,\n end: 8690,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"After unshift: \\\"\",\n start: 8691,\n end: 8708,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 8709,\n end: 8710,\n },\n TokenData {\n kind: \"Join\",\n text: \"join\",\n start: 8711,\n end: 8715,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 8715,\n end: 8716,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\", \\\"\",\n start: 8716,\n end: 8720,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8720,\n end: 8721,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 8722,\n end: 8730,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 8730,\n end: 8731,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8731,\n end: 8732,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 8744,\n end: 8746,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$first\",\n start: 8747,\n end: 8753,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 8754,\n end: 8755,\n },\n TokenData {\n kind: \"Shift\",\n text: \"shift\",\n start: 8756,\n end: 8761,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 8762,\n end: 8770,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8770,\n end: 8771,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 8777,\n end: 8780,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Shifted: $first, Array: \\\"\",\n start: 8781,\n end: 8807,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 8808,\n end: 8809,\n },\n TokenData {\n kind: \"Join\",\n text: \"join\",\n start: 8810,\n end: 8814,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 8814,\n end: 8815,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\", \\\"\",\n start: 8815,\n end: 8819,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8819,\n end: 8820,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 8821,\n end: 8829,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 8829,\n end: 8830,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8830,\n end: 8831,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 8858,\n end: 8860,\n },\n TokenData {\n kind: \"At\",\n text: \"@sorted\",\n start: 8861,\n end: 8868,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 8869,\n end: 8870,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"sort\",\n start: 8871,\n end: 8875,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 8876,\n end: 8877,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$a\",\n start: 8878,\n end: 8880,\n },\n TokenData {\n kind: \"Spaceship\",\n text: \"<=>\",\n start: 8881,\n end: 8884,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$b\",\n start: 8885,\n end: 8887,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 8888,\n end: 8889,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 8890,\n end: 8898,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8898,\n end: 8899,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 8905,\n end: 8908,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Sorted: \\\"\",\n start: 8909,\n end: 8919,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 8920,\n end: 8921,\n },\n TokenData {\n kind: \"Join\",\n text: \"join\",\n start: 8922,\n end: 8926,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 8926,\n end: 8927,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\", \\\"\",\n start: 8927,\n end: 8931,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 8931,\n end: 8932,\n },\n TokenData {\n kind: \"At\",\n text: \"@sorted\",\n start: 8933,\n end: 8940,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 8940,\n end: 8941,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8941,\n end: 8942,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 8954,\n end: 8956,\n },\n TokenData {\n kind: \"At\",\n text: \"@reversed\",\n start: 8957,\n end: 8966,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 8967,\n end: 8968,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"reverse\",\n start: 8969,\n end: 8976,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 8977,\n end: 8985,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 8985,\n end: 8986,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 8992,\n end: 8995,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Reversed: \\\"\",\n start: 8996,\n end: 9008,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 9009,\n end: 9010,\n },\n TokenData {\n kind: \"Join\",\n text: \"join\",\n start: 9011,\n end: 9015,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9015,\n end: 9016,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\", \\\"\",\n start: 9016,\n end: 9020,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 9020,\n end: 9021,\n },\n TokenData {\n kind: \"At\",\n text: \"@reversed\",\n start: 9022,\n end: 9031,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9031,\n end: 9032,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9032,\n end: 9033,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 9069,\n end: 9072,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Sum: \\\"\",\n start: 9073,\n end: 9080,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 9081,\n end: 9082,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"sum\",\n start: 9083,\n end: 9086,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9086,\n end: 9087,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 9087,\n end: 9095,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9095,\n end: 9096,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9096,\n end: 9097,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 9103,\n end: 9106,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Max: \\\"\",\n start: 9107,\n end: 9114,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 9115,\n end: 9116,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"max\",\n start: 9117,\n end: 9120,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9120,\n end: 9121,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 9121,\n end: 9129,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9129,\n end: 9130,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9130,\n end: 9131,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 9137,\n end: 9140,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Min: \\\"\",\n start: 9141,\n end: 9148,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 9149,\n end: 9150,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"min\",\n start: 9151,\n end: 9154,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9154,\n end: 9155,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 9155,\n end: 9163,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9163,\n end: 9164,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9164,\n end: 9165,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 9171,\n end: 9174,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Count: \\\"\",\n start: 9175,\n end: 9184,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 9185,\n end: 9186,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"scalar\",\n start: 9187,\n end: 9193,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9193,\n end: 9194,\n },\n TokenData {\n kind: \"At\",\n text: \"@numbers\",\n start: 9194,\n end: 9202,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9202,\n end: 9203,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9203,\n end: 9204,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 9206,\n end: 9207,\n },\n TokenData {\n kind: \"Sub\",\n text: \"sub\",\n start: 9229,\n end: 9232,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"main\",\n start: 9233,\n end: 9237,\n },\n TokenData {\n kind: \"LeftBrace\",\n text: \"{\",\n start: 9238,\n end: 9239,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 9245,\n end: 9248,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"=== Perl Test Script ===\\\"\",\n start: 9249,\n end: 9275,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9275,\n end: 9276,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 9310,\n end: 9312,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$person\",\n start: 9313,\n end: 9320,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 9321,\n end: 9322,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Person\",\n start: 9323,\n end: 9329,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 9329,\n end: 9331,\n },\n TokenData {\n kind: \"New\",\n text: \"new\",\n start: 9331,\n end: 9334,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9334,\n end: 9335,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 9345,\n end: 9349,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 9350,\n end: 9351,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 9351,\n end: 9352,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"John Smith\\\"\",\n start: 9353,\n end: 9365,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 9365,\n end: 9366,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 9376,\n end: 9379,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 9380,\n end: 9381,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 9381,\n end: 9382,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"35\",\n start: 9383,\n end: 9385,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 9385,\n end: 9386,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"email\",\n start: 9396,\n end: 9401,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 9402,\n end: 9403,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 9403,\n end: 9404,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"john.smith@example.com\\\"\",\n start: 9405,\n end: 9429,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9435,\n end: 9436,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9436,\n end: 9437,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 9449,\n end: 9451,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$employee\",\n start: 9452,\n end: 9461,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 9462,\n end: 9463,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"Employee\",\n start: 9464,\n end: 9472,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 9472,\n end: 9474,\n },\n TokenData {\n kind: \"New\",\n text: \"new\",\n start: 9474,\n end: 9477,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9477,\n end: 9478,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"name\",\n start: 9488,\n end: 9492,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 9493,\n end: 9494,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 9494,\n end: 9495,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Jane Doe\\\"\",\n start: 9496,\n end: 9506,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 9506,\n end: 9507,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"age\",\n start: 9517,\n end: 9520,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 9521,\n end: 9522,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 9522,\n end: 9523,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"28\",\n start: 9524,\n end: 9526,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 9526,\n end: 9527,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"email\",\n start: 9537,\n end: 9542,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 9543,\n end: 9544,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 9544,\n end: 9545,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"jane.doe@company.com\\\"\",\n start: 9546,\n end: 9568,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 9568,\n end: 9569,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"employee_id\",\n start: 9579,\n end: 9590,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 9591,\n end: 9592,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 9592,\n end: 9593,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"12345\",\n start: 9594,\n end: 9599,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 9599,\n end: 9600,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"department\",\n start: 9610,\n end: 9620,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 9621,\n end: 9622,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 9622,\n end: 9623,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Engineering\\\"\",\n start: 9624,\n end: 9637,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 9637,\n end: 9638,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"salary\",\n start: 9648,\n end: 9654,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 9655,\n end: 9656,\n },\n TokenData {\n kind: \"GreaterThan\",\n text: \">\",\n start: 9656,\n end: 9657,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"75000\",\n start: 9658,\n end: 9663,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9669,\n end: 9670,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9670,\n end: 9671,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 9683,\n end: 9686,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$person\",\n start: 9687,\n end: 9694,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 9694,\n end: 9696,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"to_string\",\n start: 9696,\n end: 9705,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9705,\n end: 9706,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9706,\n end: 9707,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9707,\n end: 9708,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 9714,\n end: 9717,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$employee\",\n start: 9718,\n end: 9727,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 9727,\n end: 9729,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"to_string\",\n start: 9729,\n end: 9738,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9738,\n end: 9739,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9739,\n end: 9740,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9740,\n end: 9741,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 9773,\n end: 9776,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Is person adult? \\\"\",\n start: 9777,\n end: 9796,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 9797,\n end: 9798,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9799,\n end: 9800,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$person\",\n start: 9800,\n end: 9807,\n },\n TokenData {\n kind: \"Arrow\",\n text: \"->\",\n start: 9807,\n end: 9809,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"is_adult\",\n start: 9809,\n end: 9817,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9817,\n end: 9818,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9818,\n end: 9819,\n },\n TokenData {\n kind: \"Question\",\n text: \"?\",\n start: 9820,\n end: 9821,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Yes\\\"\",\n start: 9822,\n end: 9827,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 9828,\n end: 9829,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"No\\\"\",\n start: 9830,\n end: 9834,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9834,\n end: 9835,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9835,\n end: 9836,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 9870,\n end: 9873,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"greet\",\n start: 9874,\n end: 9879,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9879,\n end: 9880,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Alice\\\"\",\n start: 9880,\n end: 9887,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9887,\n end: 9888,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9888,\n end: 9889,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 9895,\n end: 9898,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"greet\",\n start: 9899,\n end: 9904,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9904,\n end: 9905,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Bob\\\"\",\n start: 9905,\n end: 9910,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 9910,\n end: 9911,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Hi\\\"\",\n start: 9912,\n end: 9916,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9916,\n end: 9917,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9917,\n end: 9918,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 9930,\n end: 9933,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Factorial of 5: \\\"\",\n start: 9934,\n end: 9952,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 9953,\n end: 9954,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"factorial\",\n start: 9955,\n end: 9964,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 9964,\n end: 9965,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"5\",\n start: 9965,\n end: 9966,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 9966,\n end: 9967,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 9967,\n end: 9968,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 9974,\n end: 9977,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Fibonacci of 10: \\\"\",\n start: 9978,\n end: 9997,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 9998,\n end: 9999,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"fibonacci\",\n start: 10000,\n end: 10009,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10009,\n end: 10010,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"10\",\n start: 10010,\n end: 10012,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10012,\n end: 10013,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10013,\n end: 10014,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"demonstrate_loops\",\n start: 10048,\n end: 10065,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10065,\n end: 10066,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10066,\n end: 10067,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10067,\n end: 10068,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"demonstrate_conditionals\",\n start: 10074,\n end: 10098,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10098,\n end: 10099,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"92\",\n start: 10099,\n end: 10101,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10101,\n end: 10102,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10102,\n end: 10103,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"demonstrate_strings\",\n start: 10109,\n end: 10128,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10128,\n end: 10129,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10129,\n end: 10130,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10130,\n end: 10131,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"demonstrate_hashes\",\n start: 10137,\n end: 10155,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10155,\n end: 10156,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10156,\n end: 10157,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10157,\n end: 10158,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"demonstrate_arrays\",\n start: 10164,\n end: 10182,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10182,\n end: 10183,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10183,\n end: 10184,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10184,\n end: 10185,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 10224,\n end: 10226,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$email\",\n start: 10227,\n end: 10233,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 10234,\n end: 10235,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"test@example.com\\\"\",\n start: 10236,\n end: 10254,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10254,\n end: 10255,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 10261,\n end: 10264,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Email '$email' is \\\"\",\n start: 10265,\n end: 10285,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 10286,\n end: 10287,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10288,\n end: 10289,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"validate_email\",\n start: 10289,\n end: 10303,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10303,\n end: 10304,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$email\",\n start: 10304,\n end: 10310,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10310,\n end: 10311,\n },\n TokenData {\n kind: \"Question\",\n text: \"?\",\n start: 10312,\n end: 10313,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"valid\\\"\",\n start: 10314,\n end: 10321,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 10322,\n end: 10323,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"invalid\\\"\",\n start: 10324,\n end: 10333,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10333,\n end: 10334,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10334,\n end: 10335,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 10347,\n end: 10349,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$text\",\n start: 10350,\n end: 10355,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 10356,\n end: 10357,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"There are 123 apples and 456 oranges\\\"\",\n start: 10358,\n end: 10396,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10396,\n end: 10397,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 10403,\n end: 10405,\n },\n TokenData {\n kind: \"At\",\n text: \"@nums\",\n start: 10406,\n end: 10411,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 10412,\n end: 10413,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"extract_numbers\",\n start: 10414,\n end: 10429,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10429,\n end: 10430,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$text\",\n start: 10430,\n end: 10435,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10435,\n end: 10436,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10436,\n end: 10437,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 10443,\n end: 10446,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"Numbers found: \\\"\",\n start: 10447,\n end: 10464,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 10465,\n end: 10466,\n },\n TokenData {\n kind: \"Join\",\n text: \"join\",\n start: 10467,\n end: 10471,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10471,\n end: 10472,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\", \\\"\",\n start: 10472,\n end: 10476,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 10476,\n end: 10477,\n },\n TokenData {\n kind: \"At\",\n text: \"@nums\",\n start: 10478,\n end: 10483,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10483,\n end: 10484,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10484,\n end: 10485,\n },\n TokenData {\n kind: \"My\",\n text: \"my\",\n start: 10519,\n end: 10521,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$result\",\n start: 10522,\n end: 10529,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 10530,\n end: 10531,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"safe_divide\",\n start: 10532,\n end: 10543,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10543,\n end: 10544,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"10\",\n start: 10544,\n end: 10546,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 10546,\n end: 10547,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"2\",\n start: 10548,\n end: 10549,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10549,\n end: 10550,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10550,\n end: 10551,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 10557,\n end: 10560,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"10 / 2 = \\\"\",\n start: 10561,\n end: 10572,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 10573,\n end: 10574,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10575,\n end: 10576,\n },\n TokenData {\n kind: \"Defined\",\n text: \"defined\",\n start: 10576,\n end: 10583,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$result\",\n start: 10584,\n end: 10591,\n },\n TokenData {\n kind: \"Question\",\n text: \"?\",\n start: 10592,\n end: 10593,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$result\",\n start: 10594,\n end: 10601,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 10602,\n end: 10603,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"undefined\\\"\",\n start: 10604,\n end: 10615,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10615,\n end: 10616,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10616,\n end: 10617,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$result\",\n start: 10629,\n end: 10636,\n },\n TokenData {\n kind: \"Assign\",\n text: \"=\",\n start: 10637,\n end: 10638,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"safe_divide\",\n start: 10639,\n end: 10650,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10650,\n end: 10651,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"10\",\n start: 10651,\n end: 10653,\n },\n TokenData {\n kind: \"Comma\",\n text: \",\",\n start: 10653,\n end: 10654,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"0\",\n start: 10655,\n end: 10656,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10656,\n end: 10657,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10657,\n end: 10658,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 10664,\n end: 10667,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"10 / 0 = \\\"\",\n start: 10668,\n end: 10679,\n },\n TokenData {\n kind: \"Concat\",\n text: \".\",\n start: 10680,\n end: 10681,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10682,\n end: 10683,\n },\n TokenData {\n kind: \"Defined\",\n text: \"defined\",\n start: 10683,\n end: 10690,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$result\",\n start: 10691,\n end: 10698,\n },\n TokenData {\n kind: \"Question\",\n text: \"?\",\n start: 10699,\n end: 10700,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$result\",\n start: 10701,\n end: 10708,\n },\n TokenData {\n kind: \"Colon\",\n text: \":\",\n start: 10709,\n end: 10710,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"undefined\\\"\",\n start: 10711,\n end: 10722,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10722,\n end: 10723,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10723,\n end: 10724,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"say\",\n start: 10736,\n end: 10739,\n },\n TokenData {\n kind: \"StringLiteral\",\n text: \"\\\"=== End of Test Script ===\\\"\",\n start: 10740,\n end: 10768,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10768,\n end: 10769,\n },\n TokenData {\n kind: \"RightBrace\",\n text: \"}\",\n start: 10771,\n end: 10772,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"main\",\n start: 10797,\n end: 10801,\n },\n TokenData {\n kind: \"LeftParen\",\n text: \"(\",\n start: 10801,\n end: 10802,\n },\n TokenData {\n kind: \"RightParen\",\n text: \")\",\n start: 10802,\n end: 10803,\n },\n TokenData {\n kind: \"If\",\n text: \"if\",\n start: 10804,\n end: 10806,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"__FILE__\",\n start: 10807,\n end: 10815,\n },\n TokenData {\n kind: \"Identifier\",\n text: \"eq\",\n start: 10816,\n end: 10818,\n },\n TokenData {\n kind: \"Dollar\",\n text: \"$0\",\n start: 10819,\n end: 10821,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10821,\n end: 10822,\n },\n TokenData {\n kind: \"NumberLiteral\",\n text: \"1\",\n start: 10826,\n end: 10827,\n },\n TokenData {\n kind: \"Semicolon\",\n text: \";\",\n start: 10827,\n end: 10828,\n },\n TokenData {\n kind: \"Eof\",\n text: \"\",\n start: 10854,\n end: 10854,\n },\n ],\n errors: [],\n}" } [INFO] [stdout] [INFO] [stderr] error: test failed, to rerun pass `--test main` [INFO] [stdout] [INFO] [stdout] failures: [INFO] [stdout] lexer::test_perl_lexer [INFO] [stdout] [INFO] [stdout] test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "74928fe1803e7a3781d179505e9281af48464014f34f28881d550ebd68d89198", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "74928fe1803e7a3781d179505e9281af48464014f34f28881d550ebd68d89198", kill_on_drop: false }` [INFO] [stdout] 74928fe1803e7a3781d179505e9281af48464014f34f28881d550ebd68d89198