10 line_t oldline = curcmd->cop_line;
12 sv = fcmd->ff_unparsed;
13 curcmd->cop_line = fcmd->ff_line;
14 fcmd->ff_unparsed = Nullsv;
16 /* Grrf. We have to fake curcmd to be in run_format's package temporarily... */
17 (void)save_hptr(&curcmd->cop_stash);
18 (void)save_hptr(&curstash);
19 curstash = sv->sv_u.sv_hv;
20 curcmd->cop_stash = sv->sv_u.sv_hv;
23 items = arg->arg_len - 1; /* ignore $$ on end */
24 for (i = 1; i <= items; i++) {
25 if (!fcmd || fcmd->ff_type == FFt_NULL)
26 fatal("Too many field values");
28 fcmd->ff_expr = redOP(OP_ITEM,1,
29 arg[i].arg_ptr.arg_arg,Nullop,Nullop);
30 if (fcmd->ff_flags & FFf_CHOP) {
31 if ((fcmd->ff_expr[1].arg_type & A_MASK) == A_STAB) {
32 fcmd->ff_expr[1].arg_type = DD_LVAL;
33 ldehoistXXX(fcmd->ff_expr,1);
35 else if ((fcmd->ff_expr[1].arg_type & A_MASK) == A_EXPR)
36 fcmd->ff_expr[1].arg_type = A_LEXPR;
38 fatal("^ field requires scalar lvalue");
42 if (fcmd && fcmd->ff_type)
43 fatal("Not enough field values");
44 curcmd->cop_line = oldline;