Mailing List Archive

Patch: anonymous TYPE
Well, inspired by too much free time, I've implemented C<anonymous TYPE>.
It's a unary operator. I even documented it and included a test program.
I think I may be coming down with something... :-)

Note: As always when patching opcode.h or keywords.h, you may get
rejections if you've done any local modifications. However, these
files are automatically generated. So if you get rejections, just
run "perl opcode.pl" or "perl keywords.pl", respectively.


Index: keywords.h
***************
*** 19,243 ****
#define KEY_alarm 18
#define KEY_and 19
! #define KEY_atan2 20
! #define KEY_bind 21
! #define KEY_binmode 22
! #define KEY_bless 23
! #define KEY_caller 24
! #define KEY_chdir 25
! #define KEY_chmod 26
! #define KEY_chomp 27
! #define KEY_chop 28
! #define KEY_chown 29
! #define KEY_chr 30
! #define KEY_chroot 31
! #define KEY_close 32
! #define KEY_closedir 33
! #define KEY_cmp 34
! #define KEY_connect 35
! #define KEY_continue 36
! #define KEY_cos 37
! #define KEY_crypt 38
! #define KEY_dbmclose 39
! #define KEY_dbmopen 40
! #define KEY_defined 41
! #define KEY_delete 42
! #define KEY_die 43
! #define KEY_do 44
! #define KEY_dump 45
! #define KEY_each 46
! #define KEY_else 47
! #define KEY_elsif 48
! #define KEY_endgrent 49
! #define KEY_endhostent 50
! #define KEY_endnetent 51
! #define KEY_endprotoent 52
! #define KEY_endpwent 53
! #define KEY_endservent 54
! #define KEY_eof 55
! #define KEY_eq 56
! #define KEY_eval 57
! #define KEY_exec 58
! #define KEY_exists 59
! #define KEY_exit 60
! #define KEY_exp 61
! #define KEY_fcntl 62
! #define KEY_fileno 63
! #define KEY_flock 64
! #define KEY_for 65
! #define KEY_foreach 66
! #define KEY_fork 67
! #define KEY_format 68
! #define KEY_formline 69
! #define KEY_ge 70
! #define KEY_getc 71
! #define KEY_getgrent 72
! #define KEY_getgrgid 73
! #define KEY_getgrnam 74
! #define KEY_gethostbyaddr 75
! #define KEY_gethostbyname 76
! #define KEY_gethostent 77
! #define KEY_getlogin 78
! #define KEY_getnetbyaddr 79
! #define KEY_getnetbyname 80
! #define KEY_getnetent 81
! #define KEY_getpeername 82
! #define KEY_getpgrp 83
! #define KEY_getppid 84
! #define KEY_getpriority 85
! #define KEY_getprotobyname 86
! #define KEY_getprotobynumber 87
! #define KEY_getprotoent 88
! #define KEY_getpwent 89
! #define KEY_getpwnam 90
! #define KEY_getpwuid 91
! #define KEY_getservbyname 92
! #define KEY_getservbyport 93
! #define KEY_getservent 94
! #define KEY_getsockname 95
! #define KEY_getsockopt 96
! #define KEY_glob 97
! #define KEY_gmtime 98
! #define KEY_goto 99
! #define KEY_grep 100
! #define KEY_gt 101
! #define KEY_hex 102
! #define KEY_if 103
! #define KEY_index 104
! #define KEY_int 105
! #define KEY_ioctl 106
! #define KEY_join 107
! #define KEY_keys 108
! #define KEY_kill 109
! #define KEY_last 110
! #define KEY_lc 111
! #define KEY_lcfirst 112
! #define KEY_le 113
! #define KEY_length 114
! #define KEY_link 115
! #define KEY_listen 116
! #define KEY_local 117
! #define KEY_localtime 118
! #define KEY_log 119
! #define KEY_lstat 120
! #define KEY_lt 121
! #define KEY_m 122
! #define KEY_map 123
! #define KEY_mkdir 124
! #define KEY_msgctl 125
! #define KEY_msgget 126
! #define KEY_msgrcv 127
! #define KEY_msgsnd 128
! #define KEY_my 129
! #define KEY_ne 130
! #define KEY_next 131
! #define KEY_no 132
! #define KEY_not 133
! #define KEY_oct 134
! #define KEY_open 135
! #define KEY_opendir 136
! #define KEY_or 137
! #define KEY_ord 138
! #define KEY_pack 139
! #define KEY_package 140
! #define KEY_pipe 141
! #define KEY_pop 142
! #define KEY_pos 143
! #define KEY_print 144
! #define KEY_printf 145
! #define KEY_push 146
! #define KEY_q 147
! #define KEY_qq 148
! #define KEY_quotemeta 149
! #define KEY_qw 150
! #define KEY_qx 151
! #define KEY_rand 152
! #define KEY_read 153
! #define KEY_readdir 154
! #define KEY_readline 155
! #define KEY_readlink 156
! #define KEY_readpipe 157
! #define KEY_recv 158
! #define KEY_redo 159
! #define KEY_ref 160
! #define KEY_rename 161
! #define KEY_require 162
! #define KEY_reset 163
! #define KEY_return 164
! #define KEY_reverse 165
! #define KEY_rewinddir 166
! #define KEY_rindex 167
! #define KEY_rmdir 168
! #define KEY_s 169
! #define KEY_scalar 170
! #define KEY_seek 171
! #define KEY_seekdir 172
! #define KEY_select 173
! #define KEY_semctl 174
! #define KEY_semget 175
! #define KEY_semop 176
! #define KEY_send 177
! #define KEY_setgrent 178
! #define KEY_sethostent 179
! #define KEY_setnetent 180
! #define KEY_setpgrp 181
! #define KEY_setpriority 182
! #define KEY_setprotoent 183
! #define KEY_setpwent 184
! #define KEY_setservent 185
! #define KEY_setsockopt 186
! #define KEY_shift 187
! #define KEY_shmctl 188
! #define KEY_shmget 189
! #define KEY_shmread 190
! #define KEY_shmwrite 191
! #define KEY_shutdown 192
! #define KEY_sin 193
! #define KEY_sleep 194
! #define KEY_socket 195
! #define KEY_socketpair 196
! #define KEY_sort 197
! #define KEY_splice 198
! #define KEY_split 199
! #define KEY_sprintf 200
! #define KEY_sqrt 201
! #define KEY_srand 202
! #define KEY_stat 203
! #define KEY_study 204
! #define KEY_sub 205
! #define KEY_substr 206
! #define KEY_symlink 207
! #define KEY_syscall 208
! #define KEY_sysread 209
! #define KEY_system 210
! #define KEY_syswrite 211
! #define KEY_tell 212
! #define KEY_telldir 213
! #define KEY_tie 214
! #define KEY_tied 215
! #define KEY_time 216
! #define KEY_times 217
! #define KEY_tr 218
! #define KEY_truncate 219
! #define KEY_uc 220
! #define KEY_ucfirst 221
! #define KEY_umask 222
! #define KEY_undef 223
! #define KEY_unless 224
! #define KEY_unlink 225
! #define KEY_unpack 226
! #define KEY_unshift 227
! #define KEY_untie 228
! #define KEY_until 229
! #define KEY_use 230
! #define KEY_utime 231
! #define KEY_values 232
! #define KEY_vec 233
! #define KEY_wait 234
! #define KEY_waitpid 235
! #define KEY_wantarray 236
! #define KEY_warn 237
! #define KEY_while 238
! #define KEY_write 239
! #define KEY_x 240
! #define KEY_xor 241
! #define KEY_y 242
--- 19,244 ----
#define KEY_alarm 18
#define KEY_and 19
! #define KEY_anonymous 20
! #define KEY_atan2 21
! #define KEY_bind 22
! #define KEY_binmode 23
! #define KEY_bless 24
! #define KEY_caller 25
! #define KEY_chdir 26
! #define KEY_chmod 27
! #define KEY_chomp 28
! #define KEY_chop 29
! #define KEY_chown 30
! #define KEY_chr 31
! #define KEY_chroot 32
! #define KEY_close 33
! #define KEY_closedir 34
! #define KEY_cmp 35
! #define KEY_connect 36
! #define KEY_continue 37
! #define KEY_cos 38
! #define KEY_crypt 39
! #define KEY_dbmclose 40
! #define KEY_dbmopen 41
! #define KEY_defined 42
! #define KEY_delete 43
! #define KEY_die 44
! #define KEY_do 45
! #define KEY_dump 46
! #define KEY_each 47
! #define KEY_else 48
! #define KEY_elsif 49
! #define KEY_endgrent 50
! #define KEY_endhostent 51
! #define KEY_endnetent 52
! #define KEY_endprotoent 53
! #define KEY_endpwent 54
! #define KEY_endservent 55
! #define KEY_eof 56
! #define KEY_eq 57
! #define KEY_eval 58
! #define KEY_exec 59
! #define KEY_exists 60
! #define KEY_exit 61
! #define KEY_exp 62
! #define KEY_fcntl 63
! #define KEY_fileno 64
! #define KEY_flock 65
! #define KEY_for 66
! #define KEY_foreach 67
! #define KEY_fork 68
! #define KEY_format 69
! #define KEY_formline 70
! #define KEY_ge 71
! #define KEY_getc 72
! #define KEY_getgrent 73
! #define KEY_getgrgid 74
! #define KEY_getgrnam 75
! #define KEY_gethostbyaddr 76
! #define KEY_gethostbyname 77
! #define KEY_gethostent 78
! #define KEY_getlogin 79
! #define KEY_getnetbyaddr 80
! #define KEY_getnetbyname 81
! #define KEY_getnetent 82
! #define KEY_getpeername 83
! #define KEY_getpgrp 84
! #define KEY_getppid 85
! #define KEY_getpriority 86
! #define KEY_getprotobyname 87
! #define KEY_getprotobynumber 88
! #define KEY_getprotoent 89
! #define KEY_getpwent 90
! #define KEY_getpwnam 91
! #define KEY_getpwuid 92
! #define KEY_getservbyname 93
! #define KEY_getservbyport 94
! #define KEY_getservent 95
! #define KEY_getsockname 96
! #define KEY_getsockopt 97
! #define KEY_glob 98
! #define KEY_gmtime 99
! #define KEY_goto 100
! #define KEY_grep 101
! #define KEY_gt 102
! #define KEY_hex 103
! #define KEY_if 104
! #define KEY_index 105
! #define KEY_int 106
! #define KEY_ioctl 107
! #define KEY_join 108
! #define KEY_keys 109
! #define KEY_kill 110
! #define KEY_last 111
! #define KEY_lc 112
! #define KEY_lcfirst 113
! #define KEY_le 114
! #define KEY_length 115
! #define KEY_link 116
! #define KEY_listen 117
! #define KEY_local 118
! #define KEY_localtime 119
! #define KEY_log 120
! #define KEY_lstat 121
! #define KEY_lt 122
! #define KEY_m 123
! #define KEY_map 124
! #define KEY_mkdir 125
! #define KEY_msgctl 126
! #define KEY_msgget 127
! #define KEY_msgrcv 128
! #define KEY_msgsnd 129
! #define KEY_my 130
! #define KEY_ne 131
! #define KEY_next 132
! #define KEY_no 133
! #define KEY_not 134
! #define KEY_oct 135
! #define KEY_open 136
! #define KEY_opendir 137
! #define KEY_or 138
! #define KEY_ord 139
! #define KEY_pack 140
! #define KEY_package 141
! #define KEY_pipe 142
! #define KEY_pop 143
! #define KEY_pos 144
! #define KEY_print 145
! #define KEY_printf 146
! #define KEY_push 147
! #define KEY_q 148
! #define KEY_qq 149
! #define KEY_quotemeta 150
! #define KEY_qw 151
! #define KEY_qx 152
! #define KEY_rand 153
! #define KEY_read 154
! #define KEY_readdir 155
! #define KEY_readline 156
! #define KEY_readlink 157
! #define KEY_readpipe 158
! #define KEY_recv 159
! #define KEY_redo 160
! #define KEY_ref 161
! #define KEY_rename 162
! #define KEY_require 163
! #define KEY_reset 164
! #define KEY_return 165
! #define KEY_reverse 166
! #define KEY_rewinddir 167
! #define KEY_rindex 168
! #define KEY_rmdir 169
! #define KEY_s 170
! #define KEY_scalar 171
! #define KEY_seek 172
! #define KEY_seekdir 173
! #define KEY_select 174
! #define KEY_semctl 175
! #define KEY_semget 176
! #define KEY_semop 177
! #define KEY_send 178
! #define KEY_setgrent 179
! #define KEY_sethostent 180
! #define KEY_setnetent 181
! #define KEY_setpgrp 182
! #define KEY_setpriority 183
! #define KEY_setprotoent 184
! #define KEY_setpwent 185
! #define KEY_setservent 186
! #define KEY_setsockopt 187
! #define KEY_shift 188
! #define KEY_shmctl 189
! #define KEY_shmget 190
! #define KEY_shmread 191
! #define KEY_shmwrite 192
! #define KEY_shutdown 193
! #define KEY_sin 194
! #define KEY_sleep 195
! #define KEY_socket 196
! #define KEY_socketpair 197
! #define KEY_sort 198
! #define KEY_splice 199
! #define KEY_split 200
! #define KEY_sprintf 201
! #define KEY_sqrt 202
! #define KEY_srand 203
! #define KEY_stat 204
! #define KEY_study 205
! #define KEY_sub 206
! #define KEY_substr 207
! #define KEY_symlink 208
! #define KEY_syscall 209
! #define KEY_sysread 210
! #define KEY_system 211
! #define KEY_syswrite 212
! #define KEY_tell 213
! #define KEY_telldir 214
! #define KEY_tie 215
! #define KEY_tied 216
! #define KEY_time 217
! #define KEY_times 218
! #define KEY_tr 219
! #define KEY_truncate 220
! #define KEY_uc 221
! #define KEY_ucfirst 222
! #define KEY_umask 223
! #define KEY_undef 224
! #define KEY_unless 225
! #define KEY_unlink 226
! #define KEY_unpack 227
! #define KEY_unshift 228
! #define KEY_untie 229
! #define KEY_until 230
! #define KEY_use 231
! #define KEY_utime 232
! #define KEY_values 233
! #define KEY_vec 234
! #define KEY_wait 235
! #define KEY_waitpid 236
! #define KEY_wantarray 237
! #define KEY_warn 238
! #define KEY_while 239
! #define KEY_write 240
! #define KEY_x 241
! #define KEY_xor 242
! #define KEY_y 243

Index: opcode.h
*************** typedef enum {
*** 23,353 ****
OP_AV2ARYLEN, /* 16 */
OP_RV2CV, /* 17 */
! OP_ANONCODE, /* 18 */
! OP_REFGEN, /* 19 */
! OP_SREFGEN, /* 20 */
! OP_REF, /* 21 */
! OP_BLESS, /* 22 */
! OP_BACKTICK, /* 23 */
! OP_GLOB, /* 24 */
! OP_READLINE, /* 25 */
! OP_RCATLINE, /* 26 */
! OP_REGCMAYBE, /* 27 */
! OP_REGCOMP, /* 28 */
! OP_MATCH, /* 29 */
! OP_SUBST, /* 30 */
! OP_SUBSTCONT, /* 31 */
! OP_TRANS, /* 32 */
! OP_SASSIGN, /* 33 */
! OP_AASSIGN, /* 34 */
! OP_CHOP, /* 35 */
! OP_SCHOP, /* 36 */
! OP_CHOMP, /* 37 */
! OP_SCHOMP, /* 38 */
! OP_DEFINED, /* 39 */
! OP_UNDEF, /* 40 */
! OP_STUDY, /* 41 */
! OP_POS, /* 42 */
! OP_PREINC, /* 43 */
! OP_I_PREINC, /* 44 */
! OP_PREDEC, /* 45 */
! OP_I_PREDEC, /* 46 */
! OP_POSTINC, /* 47 */
! OP_I_POSTINC, /* 48 */
! OP_POSTDEC, /* 49 */
! OP_I_POSTDEC, /* 50 */
! OP_POW, /* 51 */
! OP_MULTIPLY, /* 52 */
! OP_I_MULTIPLY, /* 53 */
! OP_DIVIDE, /* 54 */
! OP_I_DIVIDE, /* 55 */
! OP_MODULO, /* 56 */
! OP_I_MODULO, /* 57 */
! OP_REPEAT, /* 58 */
! OP_ADD, /* 59 */
! OP_I_ADD, /* 60 */
! OP_SUBTRACT, /* 61 */
! OP_I_SUBTRACT, /* 62 */
! OP_CONCAT, /* 63 */
! OP_STRINGIFY, /* 64 */
! OP_LEFT_SHIFT, /* 65 */
! OP_RIGHT_SHIFT, /* 66 */
! OP_LT, /* 67 */
! OP_I_LT, /* 68 */
! OP_GT, /* 69 */
! OP_I_GT, /* 70 */
! OP_LE, /* 71 */
! OP_I_LE, /* 72 */
! OP_GE, /* 73 */
! OP_I_GE, /* 74 */
! OP_EQ, /* 75 */
! OP_I_EQ, /* 76 */
! OP_NE, /* 77 */
! OP_I_NE, /* 78 */
! OP_NCMP, /* 79 */
! OP_I_NCMP, /* 80 */
! OP_SLT, /* 81 */
! OP_SGT, /* 82 */
! OP_SLE, /* 83 */
! OP_SGE, /* 84 */
! OP_SEQ, /* 85 */
! OP_SNE, /* 86 */
! OP_SCMP, /* 87 */
! OP_BIT_AND, /* 88 */
! OP_BIT_XOR, /* 89 */
! OP_BIT_OR, /* 90 */
! OP_NEGATE, /* 91 */
! OP_I_NEGATE, /* 92 */
! OP_NOT, /* 93 */
! OP_COMPLEMENT, /* 94 */
! OP_ATAN2, /* 95 */
! OP_SIN, /* 96 */
! OP_COS, /* 97 */
! OP_RAND, /* 98 */
! OP_SRAND, /* 99 */
! OP_EXP, /* 100 */
! OP_LOG, /* 101 */
! OP_SQRT, /* 102 */
! OP_INT, /* 103 */
! OP_HEX, /* 104 */
! OP_OCT, /* 105 */
! OP_ABS, /* 106 */
! OP_LENGTH, /* 107 */
! OP_SUBSTR, /* 108 */
! OP_VEC, /* 109 */
! OP_INDEX, /* 110 */
! OP_RINDEX, /* 111 */
! OP_SPRINTF, /* 112 */
! OP_FORMLINE, /* 113 */
! OP_ORD, /* 114 */
! OP_CHR, /* 115 */
! OP_CRYPT, /* 116 */
! OP_UCFIRST, /* 117 */
! OP_LCFIRST, /* 118 */
! OP_UC, /* 119 */
! OP_LC, /* 120 */
! OP_QUOTEMETA, /* 121 */
! OP_RV2AV, /* 122 */
! OP_AELEMFAST, /* 123 */
! OP_AELEM, /* 124 */
! OP_ASLICE, /* 125 */
! OP_EACH, /* 126 */
! OP_VALUES, /* 127 */
! OP_KEYS, /* 128 */
! OP_DELETE, /* 129 */
! OP_EXISTS, /* 130 */
! OP_RV2HV, /* 131 */
! OP_HELEM, /* 132 */
! OP_HSLICE, /* 133 */
! OP_UNPACK, /* 134 */
! OP_PACK, /* 135 */
! OP_SPLIT, /* 136 */
! OP_JOIN, /* 137 */
! OP_LIST, /* 138 */
! OP_LSLICE, /* 139 */
! OP_ANONLIST, /* 140 */
! OP_ANONHASH, /* 141 */
! OP_SPLICE, /* 142 */
! OP_PUSH, /* 143 */
! OP_POP, /* 144 */
! OP_SHIFT, /* 145 */
! OP_UNSHIFT, /* 146 */
! OP_SORT, /* 147 */
! OP_REVERSE, /* 148 */
! OP_GREPSTART, /* 149 */
! OP_GREPWHILE, /* 150 */
! OP_MAPSTART, /* 151 */
! OP_MAPWHILE, /* 152 */
! OP_RANGE, /* 153 */
! OP_FLIP, /* 154 */
! OP_FLOP, /* 155 */
! OP_AND, /* 156 */
! OP_OR, /* 157 */
! OP_XOR, /* 158 */
! OP_COND_EXPR, /* 159 */
! OP_ANDASSIGN, /* 160 */
! OP_ORASSIGN, /* 161 */
! OP_METHOD, /* 162 */
! OP_ENTERSUB, /* 163 */
! OP_LEAVESUB, /* 164 */
! OP_CALLER, /* 165 */
! OP_WARN, /* 166 */
! OP_DIE, /* 167 */
! OP_RESET, /* 168 */
! OP_LINESEQ, /* 169 */
! OP_NEXTSTATE, /* 170 */
! OP_DBSTATE, /* 171 */
! OP_UNSTACK, /* 172 */
! OP_ENTER, /* 173 */
! OP_LEAVE, /* 174 */
! OP_SCOPE, /* 175 */
! OP_ENTERITER, /* 176 */
! OP_ITER, /* 177 */
! OP_ENTERLOOP, /* 178 */
! OP_LEAVELOOP, /* 179 */
! OP_RETURN, /* 180 */
! OP_LAST, /* 181 */
! OP_NEXT, /* 182 */
! OP_REDO, /* 183 */
! OP_DUMP, /* 184 */
! OP_GOTO, /* 185 */
! OP_EXIT, /* 186 */
! OP_OPEN, /* 187 */
! OP_CLOSE, /* 188 */
! OP_PIPE_OP, /* 189 */
! OP_FILENO, /* 190 */
! OP_UMASK, /* 191 */
! OP_BINMODE, /* 192 */
! OP_TIE, /* 193 */
! OP_UNTIE, /* 194 */
! OP_TIED, /* 195 */
! OP_DBMOPEN, /* 196 */
! OP_DBMCLOSE, /* 197 */
! OP_SSELECT, /* 198 */
! OP_SELECT, /* 199 */
! OP_GETC, /* 200 */
! OP_READ, /* 201 */
! OP_ENTERWRITE, /* 202 */
! OP_LEAVEWRITE, /* 203 */
! OP_PRTF, /* 204 */
! OP_PRINT, /* 205 */
! OP_SYSREAD, /* 206 */
! OP_SYSWRITE, /* 207 */
! OP_SEND, /* 208 */
! OP_RECV, /* 209 */
! OP_EOF, /* 210 */
! OP_TELL, /* 211 */
! OP_SEEK, /* 212 */
! OP_TRUNCATE, /* 213 */
! OP_FCNTL, /* 214 */
! OP_IOCTL, /* 215 */
! OP_FLOCK, /* 216 */
! OP_SOCKET, /* 217 */
! OP_SOCKPAIR, /* 218 */
! OP_BIND, /* 219 */
! OP_CONNECT, /* 220 */
! OP_LISTEN, /* 221 */
! OP_ACCEPT, /* 222 */
! OP_SHUTDOWN, /* 223 */
! OP_GSOCKOPT, /* 224 */
! OP_SSOCKOPT, /* 225 */
! OP_GETSOCKNAME, /* 226 */
! OP_GETPEERNAME, /* 227 */
! OP_LSTAT, /* 228 */
! OP_STAT, /* 229 */
! OP_FTRREAD, /* 230 */
! OP_FTRWRITE, /* 231 */
! OP_FTREXEC, /* 232 */
! OP_FTEREAD, /* 233 */
! OP_FTEWRITE, /* 234 */
! OP_FTEEXEC, /* 235 */
! OP_FTIS, /* 236 */
! OP_FTEOWNED, /* 237 */
! OP_FTROWNED, /* 238 */
! OP_FTZERO, /* 239 */
! OP_FTSIZE, /* 240 */
! OP_FTMTIME, /* 241 */
! OP_FTATIME, /* 242 */
! OP_FTCTIME, /* 243 */
! OP_FTSOCK, /* 244 */
! OP_FTCHR, /* 245 */
! OP_FTBLK, /* 246 */
! OP_FTFILE, /* 247 */
! OP_FTDIR, /* 248 */
! OP_FTPIPE, /* 249 */
! OP_FTLINK, /* 250 */
! OP_FTSUID, /* 251 */
! OP_FTSGID, /* 252 */
! OP_FTSVTX, /* 253 */
! OP_FTTTY, /* 254 */
! OP_FTTEXT, /* 255 */
! OP_FTBINARY, /* 256 */
! OP_CHDIR, /* 257 */
! OP_CHOWN, /* 258 */
! OP_CHROOT, /* 259 */
! OP_UNLINK, /* 260 */
! OP_CHMOD, /* 261 */
! OP_UTIME, /* 262 */
! OP_RENAME, /* 263 */
! OP_LINK, /* 264 */
! OP_SYMLINK, /* 265 */
! OP_READLINK, /* 266 */
! OP_MKDIR, /* 267 */
! OP_RMDIR, /* 268 */
! OP_OPEN_DIR, /* 269 */
! OP_READDIR, /* 270 */
! OP_TELLDIR, /* 271 */
! OP_SEEKDIR, /* 272 */
! OP_REWINDDIR, /* 273 */
! OP_CLOSEDIR, /* 274 */
! OP_FORK, /* 275 */
! OP_WAIT, /* 276 */
! OP_WAITPID, /* 277 */
! OP_SYSTEM, /* 278 */
! OP_EXEC, /* 279 */
! OP_KILL, /* 280 */
! OP_GETPPID, /* 281 */
! OP_GETPGRP, /* 282 */
! OP_SETPGRP, /* 283 */
! OP_GETPRIORITY, /* 284 */
! OP_SETPRIORITY, /* 285 */
! OP_TIME, /* 286 */
! OP_TMS, /* 287 */
! OP_LOCALTIME, /* 288 */
! OP_GMTIME, /* 289 */
! OP_ALARM, /* 290 */
! OP_SLEEP, /* 291 */
! OP_SHMGET, /* 292 */
! OP_SHMCTL, /* 293 */
! OP_SHMREAD, /* 294 */
! OP_SHMWRITE, /* 295 */
! OP_MSGGET, /* 296 */
! OP_MSGCTL, /* 297 */
! OP_MSGSND, /* 298 */
! OP_MSGRCV, /* 299 */
! OP_SEMGET, /* 300 */
! OP_SEMCTL, /* 301 */
! OP_SEMOP, /* 302 */
! OP_REQUIRE, /* 303 */
! OP_DOFILE, /* 304 */
! OP_ENTEREVAL, /* 305 */
! OP_LEAVEEVAL, /* 306 */
! OP_ENTERTRY, /* 307 */
! OP_LEAVETRY, /* 308 */
! OP_GHBYNAME, /* 309 */
! OP_GHBYADDR, /* 310 */
! OP_GHOSTENT, /* 311 */
! OP_GNBYNAME, /* 312 */
! OP_GNBYADDR, /* 313 */
! OP_GNETENT, /* 314 */
! OP_GPBYNAME, /* 315 */
! OP_GPBYNUMBER, /* 316 */
! OP_GPROTOENT, /* 317 */
! OP_GSBYNAME, /* 318 */
! OP_GSBYPORT, /* 319 */
! OP_GSERVENT, /* 320 */
! OP_SHOSTENT, /* 321 */
! OP_SNETENT, /* 322 */
! OP_SPROTOENT, /* 323 */
! OP_SSERVENT, /* 324 */
! OP_EHOSTENT, /* 325 */
! OP_ENETENT, /* 326 */
! OP_EPROTOENT, /* 327 */
! OP_ESERVENT, /* 328 */
! OP_GPWNAM, /* 329 */
! OP_GPWUID, /* 330 */
! OP_GPWENT, /* 331 */
! OP_SPWENT, /* 332 */
! OP_EPWENT, /* 333 */
! OP_GGRNAM, /* 334 */
! OP_GGRGID, /* 335 */
! OP_GGRENT, /* 336 */
! OP_SGRENT, /* 337 */
! OP_EGRENT, /* 338 */
! OP_GETLOGIN, /* 339 */
! OP_SYSCALL, /* 340 */
OP_max
} opcode;

! #define MAXO 341

#ifndef DOINIT
--- 23,354 ----
OP_AV2ARYLEN, /* 16 */
OP_RV2CV, /* 17 */
! OP_ANONVALUE, /* 18 */
! OP_ANONCODE, /* 19 */
! OP_REFGEN, /* 20 */
! OP_SREFGEN, /* 21 */
! OP_REF, /* 22 */
! OP_BLESS, /* 23 */
! OP_BACKTICK, /* 24 */
! OP_GLOB, /* 25 */
! OP_READLINE, /* 26 */
! OP_RCATLINE, /* 27 */
! OP_REGCMAYBE, /* 28 */
! OP_REGCOMP, /* 29 */
! OP_MATCH, /* 30 */
! OP_SUBST, /* 31 */
! OP_SUBSTCONT, /* 32 */
! OP_TRANS, /* 33 */
! OP_SASSIGN, /* 34 */
! OP_AASSIGN, /* 35 */
! OP_CHOP, /* 36 */
! OP_SCHOP, /* 37 */
! OP_CHOMP, /* 38 */
! OP_SCHOMP, /* 39 */
! OP_DEFINED, /* 40 */
! OP_UNDEF, /* 41 */
! OP_STUDY, /* 42 */
! OP_POS, /* 43 */
! OP_PREINC, /* 44 */
! OP_I_PREINC, /* 45 */
! OP_PREDEC, /* 46 */
! OP_I_PREDEC, /* 47 */
! OP_POSTINC, /* 48 */
! OP_I_POSTINC, /* 49 */
! OP_POSTDEC, /* 50 */
! OP_I_POSTDEC, /* 51 */
! OP_POW, /* 52 */
! OP_MULTIPLY, /* 53 */
! OP_I_MULTIPLY, /* 54 */
! OP_DIVIDE, /* 55 */
! OP_I_DIVIDE, /* 56 */
! OP_MODULO, /* 57 */
! OP_I_MODULO, /* 58 */
! OP_REPEAT, /* 59 */
! OP_ADD, /* 60 */
! OP_I_ADD, /* 61 */
! OP_SUBTRACT, /* 62 */
! OP_I_SUBTRACT, /* 63 */
! OP_CONCAT, /* 64 */
! OP_STRINGIFY, /* 65 */
! OP_LEFT_SHIFT, /* 66 */
! OP_RIGHT_SHIFT, /* 67 */
! OP_LT, /* 68 */
! OP_I_LT, /* 69 */
! OP_GT, /* 70 */
! OP_I_GT, /* 71 */
! OP_LE, /* 72 */
! OP_I_LE, /* 73 */
! OP_GE, /* 74 */
! OP_I_GE, /* 75 */
! OP_EQ, /* 76 */
! OP_I_EQ, /* 77 */
! OP_NE, /* 78 */
! OP_I_NE, /* 79 */
! OP_NCMP, /* 80 */
! OP_I_NCMP, /* 81 */
! OP_SLT, /* 82 */
! OP_SGT, /* 83 */
! OP_SLE, /* 84 */
! OP_SGE, /* 85 */
! OP_SEQ, /* 86 */
! OP_SNE, /* 87 */
! OP_SCMP, /* 88 */
! OP_BIT_AND, /* 89 */
! OP_BIT_XOR, /* 90 */
! OP_BIT_OR, /* 91 */
! OP_NEGATE, /* 92 */
! OP_I_NEGATE, /* 93 */
! OP_NOT, /* 94 */
! OP_COMPLEMENT, /* 95 */
! OP_ATAN2, /* 96 */
! OP_SIN, /* 97 */
! OP_COS, /* 98 */
! OP_RAND, /* 99 */
! OP_SRAND, /* 100 */
! OP_EXP, /* 101 */
! OP_LOG, /* 102 */
! OP_SQRT, /* 103 */
! OP_INT, /* 104 */
! OP_HEX, /* 105 */
! OP_OCT, /* 106 */
! OP_ABS, /* 107 */
! OP_LENGTH, /* 108 */
! OP_SUBSTR, /* 109 */
! OP_VEC, /* 110 */
! OP_INDEX, /* 111 */
! OP_RINDEX, /* 112 */
! OP_SPRINTF, /* 113 */
! OP_FORMLINE, /* 114 */
! OP_ORD, /* 115 */
! OP_CHR, /* 116 */
! OP_CRYPT, /* 117 */
! OP_UCFIRST, /* 118 */
! OP_LCFIRST, /* 119 */
! OP_UC, /* 120 */
! OP_LC, /* 121 */
! OP_QUOTEMETA, /* 122 */
! OP_RV2AV, /* 123 */
! OP_AELEMFAST, /* 124 */
! OP_AELEM, /* 125 */
! OP_ASLICE, /* 126 */
! OP_EACH, /* 127 */
! OP_VALUES, /* 128 */
! OP_KEYS, /* 129 */
! OP_DELETE, /* 130 */
! OP_EXISTS, /* 131 */
! OP_RV2HV, /* 132 */
! OP_HELEM, /* 133 */
! OP_HSLICE, /* 134 */
! OP_UNPACK, /* 135 */
! OP_PACK, /* 136 */
! OP_SPLIT, /* 137 */
! OP_JOIN, /* 138 */
! OP_LIST, /* 139 */
! OP_LSLICE, /* 140 */
! OP_ANONLIST, /* 141 */
! OP_ANONHASH, /* 142 */
! OP_SPLICE, /* 143 */
! OP_PUSH, /* 144 */
! OP_POP, /* 145 */
! OP_SHIFT, /* 146 */
! OP_UNSHIFT, /* 147 */
! OP_SORT, /* 148 */
! OP_REVERSE, /* 149 */
! OP_GREPSTART, /* 150 */
! OP_GREPWHILE, /* 151 */
! OP_MAPSTART, /* 152 */
! OP_MAPWHILE, /* 153 */
! OP_RANGE, /* 154 */
! OP_FLIP, /* 155 */
! OP_FLOP, /* 156 */
! OP_AND, /* 157 */
! OP_OR, /* 158 */
! OP_XOR, /* 159 */
! OP_COND_EXPR, /* 160 */
! OP_ANDASSIGN, /* 161 */
! OP_ORASSIGN, /* 162 */
! OP_METHOD, /* 163 */
! OP_ENTERSUB, /* 164 */
! OP_LEAVESUB, /* 165 */
! OP_CALLER, /* 166 */
! OP_WARN, /* 167 */
! OP_DIE, /* 168 */
! OP_RESET, /* 169 */
! OP_LINESEQ, /* 170 */
! OP_NEXTSTATE, /* 171 */
! OP_DBSTATE, /* 172 */
! OP_UNSTACK, /* 173 */
! OP_ENTER, /* 174 */
! OP_LEAVE, /* 175 */
! OP_SCOPE, /* 176 */
! OP_ENTERITER, /* 177 */
! OP_ITER, /* 178 */
! OP_ENTERLOOP, /* 179 */
! OP_LEAVELOOP, /* 180 */
! OP_RETURN, /* 181 */
! OP_LAST, /* 182 */
! OP_NEXT, /* 183 */
! OP_REDO, /* 184 */
! OP_DUMP, /* 185 */
! OP_GOTO, /* 186 */
! OP_EXIT, /* 187 */
! OP_OPEN, /* 188 */
! OP_CLOSE, /* 189 */
! OP_PIPE_OP, /* 190 */
! OP_FILENO, /* 191 */
! OP_UMASK, /* 192 */
! OP_BINMODE, /* 193 */
! OP_TIE, /* 194 */
! OP_UNTIE, /* 195 */
! OP_TIED, /* 196 */
! OP_DBMOPEN, /* 197 */
! OP_DBMCLOSE, /* 198 */
! OP_SSELECT, /* 199 */
! OP_SELECT, /* 200 */
! OP_GETC, /* 201 */
! OP_READ, /* 202 */
! OP_ENTERWRITE, /* 203 */
! OP_LEAVEWRITE, /* 204 */
! OP_PRTF, /* 205 */
! OP_PRINT, /* 206 */
! OP_SYSREAD, /* 207 */
! OP_SYSWRITE, /* 208 */
! OP_SEND, /* 209 */
! OP_RECV, /* 210 */
! OP_EOF, /* 211 */
! OP_TELL, /* 212 */
! OP_SEEK, /* 213 */
! OP_TRUNCATE, /* 214 */
! OP_FCNTL, /* 215 */
! OP_IOCTL, /* 216 */
! OP_FLOCK, /* 217 */
! OP_SOCKET, /* 218 */
! OP_SOCKPAIR, /* 219 */
! OP_BIND, /* 220 */
! OP_CONNECT, /* 221 */
! OP_LISTEN, /* 222 */
! OP_ACCEPT, /* 223 */
! OP_SHUTDOWN, /* 224 */
! OP_GSOCKOPT, /* 225 */
! OP_SSOCKOPT, /* 226 */
! OP_GETSOCKNAME, /* 227 */
! OP_GETPEERNAME, /* 228 */
! OP_LSTAT, /* 229 */
! OP_STAT, /* 230 */
! OP_FTRREAD, /* 231 */
! OP_FTRWRITE, /* 232 */
! OP_FTREXEC, /* 233 */
! OP_FTEREAD, /* 234 */
! OP_FTEWRITE, /* 235 */
! OP_FTEEXEC, /* 236 */
! OP_FTIS, /* 237 */
! OP_FTEOWNED, /* 238 */
! OP_FTROWNED, /* 239 */
! OP_FTZERO, /* 240 */
! OP_FTSIZE, /* 241 */
! OP_FTMTIME, /* 242 */
! OP_FTATIME, /* 243 */
! OP_FTCTIME, /* 244 */
! OP_FTSOCK, /* 245 */
! OP_FTCHR, /* 246 */
! OP_FTBLK, /* 247 */
! OP_FTFILE, /* 248 */
! OP_FTDIR, /* 249 */
! OP_FTPIPE, /* 250 */
! OP_FTLINK, /* 251 */
! OP_FTSUID, /* 252 */
! OP_FTSGID, /* 253 */
! OP_FTSVTX, /* 254 */
! OP_FTTTY, /* 255 */
! OP_FTTEXT, /* 256 */
! OP_FTBINARY, /* 257 */
! OP_CHDIR, /* 258 */
! OP_CHOWN, /* 259 */
! OP_CHROOT, /* 260 */
! OP_UNLINK, /* 261 */
! OP_CHMOD, /* 262 */
! OP_UTIME, /* 263 */
! OP_RENAME, /* 264 */
! OP_LINK, /* 265 */
! OP_SYMLINK, /* 266 */
! OP_READLINK, /* 267 */
! OP_MKDIR, /* 268 */
! OP_RMDIR, /* 269 */
! OP_OPEN_DIR, /* 270 */
! OP_READDIR, /* 271 */
! OP_TELLDIR, /* 272 */
! OP_SEEKDIR, /* 273 */
! OP_REWINDDIR, /* 274 */
! OP_CLOSEDIR, /* 275 */
! OP_FORK, /* 276 */
! OP_WAIT, /* 277 */
! OP_WAITPID, /* 278 */
! OP_SYSTEM, /* 279 */
! OP_EXEC, /* 280 */
! OP_KILL, /* 281 */
! OP_GETPPID, /* 282 */
! OP_GETPGRP, /* 283 */
! OP_SETPGRP, /* 284 */
! OP_GETPRIORITY, /* 285 */
! OP_SETPRIORITY, /* 286 */
! OP_TIME, /* 287 */
! OP_TMS, /* 288 */
! OP_LOCALTIME, /* 289 */
! OP_GMTIME, /* 290 */
! OP_ALARM, /* 291 */
! OP_SLEEP, /* 292 */
! OP_SHMGET, /* 293 */
! OP_SHMCTL, /* 294 */
! OP_SHMREAD, /* 295 */
! OP_SHMWRITE, /* 296 */
! OP_MSGGET, /* 297 */
! OP_MSGCTL, /* 298 */
! OP_MSGSND, /* 299 */
! OP_MSGRCV, /* 300 */
! OP_SEMGET, /* 301 */
! OP_SEMCTL, /* 302 */
! OP_SEMOP, /* 303 */
! OP_REQUIRE, /* 304 */
! OP_DOFILE, /* 305 */
! OP_ENTEREVAL, /* 306 */
! OP_LEAVEEVAL, /* 307 */
! OP_ENTERTRY, /* 308 */
! OP_LEAVETRY, /* 309 */
! OP_GHBYNAME, /* 310 */
! OP_GHBYADDR, /* 311 */
! OP_GHOSTENT, /* 312 */
! OP_GNBYNAME, /* 313 */
! OP_GNBYADDR, /* 314 */
! OP_GNETENT, /* 315 */
! OP_GPBYNAME, /* 316 */
! OP_GPBYNUMBER, /* 317 */
! OP_GPROTOENT, /* 318 */
! OP_GSBYNAME, /* 319 */
! OP_GSBYPORT, /* 320 */
! OP_GSERVENT, /* 321 */
! OP_SHOSTENT, /* 322 */
! OP_SNETENT, /* 323 */
! OP_SPROTOENT, /* 324 */
! OP_SSERVENT, /* 325 */
! OP_EHOSTENT, /* 326 */
! OP_ENETENT, /* 327 */
! OP_EPROTOENT, /* 328 */
! OP_ESERVENT, /* 329 */
! OP_GPWNAM, /* 330 */
! OP_GPWUID, /* 331 */
! OP_GPWENT, /* 332 */
! OP_SPWENT, /* 333 */
! OP_EPWENT, /* 334 */
! OP_GGRNAM, /* 335 */
! OP_GGRGID, /* 336 */
! OP_GGRENT, /* 337 */
! OP_SGRENT, /* 338 */
! OP_EGRENT, /* 339 */
! OP_GETLOGIN, /* 340 */
! OP_SYSCALL, /* 341 */
OP_max
} opcode;

! #define MAXO 342

#ifndef DOINIT
*************** EXT char *op_name[] = {
*** 373,376 ****
--- 374,378 ----
"array length",
"subroutine deref",
+ "anonymous value",
"anonymous subroutine",
"reference constructor",
*************** OP * pp_rv2sv _((void));
*** 746,749 ****
--- 748,752 ----
OP * pp_av2arylen _((void));
OP * pp_rv2cv _((void));
+ OP * pp_anonvalue _((void));
OP * pp_anoncode _((void));
OP * pp_refgen _((void));
*************** EXT OP * (*ppaddr[])() = {
*** 1092,1095 ****
--- 1095,1099 ----
pp_av2arylen,
pp_rv2cv,
+ pp_anonvalue,
pp_anoncode,
pp_refgen,
*************** EXT OP * (*check[])() = {
*** 1440,1443 ****
--- 1444,1448 ----
ck_null, /* av2arylen */
ck_rvconst, /* rv2cv */
+ ck_null, /* anonvalue */
ck_null, /* anoncode */
ck_spair, /* refgen */
*************** EXT U32 opargs[] = {
*** 1788,1791 ****
--- 1793,1797 ----
0x00000014, /* av2arylen */
0x00000040, /* rv2cv */
+ 0x00000104, /* anonvalue */
0x00000000, /* anoncode */
0x00000201, /* refgen */

Index: keywords.pl
***************
*** 44,47 ****
--- 44,48 ----
alarm
and
+ anonymous
atan2
bind

Index: opcode.pl
***************
*** 191,194 ****
--- 191,195 ----
av2arylen array length ck_null is
rv2cv subroutine deref ck_rvconst d
+ anonvalue anonymous value ck_null s S
anoncode anonymous subroutine ck_null 0
refgen reference constructor ck_spair m L

Index: pod/perlfunc.pod
***************
*** 197,200 ****
--- 197,220 ----
or else see L</select()> below.

+ =item anonymous TYPE
+
+ Returns a reference to an anonymous value of type TYPE, where TYPE is
+ "SCALAR", "ARRAY", "HASH", "GLOB", "FILEHANDLE", or "FORMATLINE". If
+ TYPE is invalid, returns the undefined value.
+
+ Anonymous scalars, arrays, and hashes can be produced without the
+ C<anonymous> operator (e.g. C<do { my $x; \$x }>).
+
+ Anonymous globs appear to have the name "*PACK::ANON_#", where PACK is
+ the current package at the point of the C<anonymous> call, and "#" is
+ a decimal serial number. However, the glob is not actually referenced
+ in any symbol table; that's what makes it anonymous.
+
+ Anonymous file handles are automatically blessed into the package
+ C<FileHandle>. See C<bless>.
+
+ Anonymous format lines have no use as of this writing. However, they
+ are included here for completeness and in hope of future utility.
+
=item atan2 Y,X


Index: pp.c
*************** PP(pp_rv2cv)
*** 264,267 ****
--- 264,309 ----
}

+ PP(pp_anonvalue)
+ {
+ dSP;
+ SV *whatsv = POPs;
+ int whatlen;
+ char *what = SvPV(whatsv, whatlen);
+ SV *ret, *sv = NULL;
+
+ if (whatlen == 6 && strnEQ(what, "SCALAR", 6)) {
+ sv = newSV(0);
+ }
+ else if (whatlen == 5 && strnEQ(what, "ARRAY", 5)) {
+ sv = (SV *)newAV();
+ }
+ else if (whatlen == 4 && strnEQ(what, "HASH", 4)) {
+ sv = (SV *)newHV();
+ }
+ else if (whatlen == 4 && strnEQ(what, "GLOB", 4)) {
+ sv = newSV(0);
+ { static long anon_count;
+ sprintf(tokenbuf, "ANON_%ld", anon_count++); }
+ gv_init((GV *)sv, curcop->cop_stash, tokenbuf, strlen(tokenbuf), TRUE);
+ }
+ else if (whatlen == 10 && strnEQ(what, "FORMATLINE", 10)) {
+ sv = newSV(0);
+ sv_upgrade(sv, SVt_PVFM);
+ }
+ else if (whatlen == 10 && strnEQ(what, "FILEHANDLE", 10)) {
+ sv = (SV *)newIO();
+ }
+
+ if (sv) {
+ ret = newRV(sv);
+ SvREFCNT_dec(sv);
+ }
+ else
+ ret = &sv_undef;
+
+ PUSHs(ret);
+ RETURN;
+ }
+
PP(pp_anoncode)
{

Index: t/op/anonymous.t
***************
*** 0 ****
--- 1,13 ----
+ #!./perl
+
+ print "1..5\n";
+
+ $x = anonymous "SCALAR"; $$x = "ok 1"; print $$x, "\n";
+ $x = anonymous "ARRAY"; @$x = ("ok", 2); print join(" ", @$x), "\n";
+ $x = anonymous "HASH"; $$x{ok} = 3; print join(" ", %$x), "\n";
+
+ $x = anonymous "GLOB";
+ print(("".*$x =~ /^\*main::ANON/) ? "ok" : "not ok", " 4\n");
+
+ $x = anonymous "FILEHANDLE";
+ print(("".$x =~ /^FileHandle=FILEHANDLE/) ? "ok" : "not ok", " 5\n");

Index: toke.c
*************** yylex()
*** 2492,2495 ****
--- 2492,2498 ----
OPERATOR(ANDOP);

+ case KEY_anonymous:
+ UNI(OP_ANONVALUE);
+
case KEY_atan2:
LOP(OP_ATAN2,XTERM);
*************** I32 len;
*** 3344,3347 ****
--- 3347,3353 ----
case 6:
if (strEQ(d,"accept")) return -KEY_accept;
+ break;
+ case 9:
+ if (strEQ(d,"anonymous")) return -KEY_anonymous;
break;
}